5-1 A - 删数问题
#include
#include
int main()
{
char a[101];
int s;
scanf("%s %d",a,&s);//将输入整数看成字符串会比较好做
int n=strlen(a);
while(s--)//删几个数
{
int i=0;
while(a[i]<=a[i+1]&&i+1
5-2 B - 活动选择
#include
struct node
{
int begin,end,num;
}a[101],t;
int main()
{
int n;
scanf("%d",&n);
for(int i=0;ia[j+1].end)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}//按结束时间顺序排好,本题只需要按结束时间进行排序,然后找出后面哪几个开始时间在前面一个结束时间之后即可
int now=a[0].end;//令第一个为结束时间
printf("%d",a[0].num);
for(int i=1;i=now)//比较
{
printf(",%d",a[i].num);
now=a[i].end;//定义了新的结束时间
}
}
return 0;
}
5-3 C - 活动选择问题
#include
struct node
{
int begin,end;
}a[101],t;
int main()
{
int n;
scanf("%d",&n);
for(int i=0;ia[j+1].end)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
int now=a[0].end;//到此为止和上面的题差不多;
int b=1;//这里有些变化,首先因为第一个活动a[0]肯定可以举办,所以定义b=1;
for(int i=1;i=now)
{
b++;//统计个数
now=a[i].end;
}
}
printf("%d",b);
return 0;
}
5-4 D - 区间覆盖问题
#include
void sort(int *a,int n,int flag)
{
int t;
if(flag==1)
{
for(int i=0; ia[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}//冒泡升序
else
{
for(int i=0; i
5-5 E - 最少拦截系统
#include
int q[1000100];
int n;
int main()
{
scanf("%d", &n);
for (int i=0;i
5-6 F - 悼念512汶川大地震遇难同胞
#include
struct node
{
int p,h;
}a[1001],t;
int main()
{
int n,m,i,j;
scanf("%d %d",&n,&m);
for(i=0;ia[j+1].p)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}//将不同种类的大米按每斤价格从低到高排列
double ans=0;
for(i=0;in)
{
break;
}
ans=ans+a[i].h*1.0;//先买便宜的,如果全部买便宜的钱都不够的话就直接退出循环,如果钱够了,就用剩下的钱去买贵的
n=n-a[i].h*a[i].p;
}
ans=ans+n*1.0/a[i].p;
printf("%.2f",ans);
return 0;
}
5-7 G - 懒虫小鑫
#include
#include
struct node
{
int w,p;
}a[10001],t;
void sort(int l,int r)//快排,按从小到大排重量,相同重量的从大到小排价格
{
t=a[l];
int i=l,j=r;
if(l>=r) return;
while(it.w||(a[j].w==t.w&&a[j].p<=t.p))&&i=t.p))&&i
5-8 装船问题
#include
#include
struct node
{
int p,w,x;
} a[10001],t;
void sort(int l,int r)
{
t=a[l];
int i=l,j=r;
if(l>=r)
return;
while(i=t.x) i++;
a[j]=a[i];
}
a[i]=t;
sort(l,i-1);
sort(i+1,r);
}
int main()
{
int M,i;
scanf("%d",&M);
for(i=0; i<10; i++)
{
scanf("%d %d",&a[i].p,&a[i].w);
a[i].x=a[i].p/a[i].w;
}
sort(0,9);
int ans=0;
for(i=0;i<10;i++)
{
if(a[i].w<=M)
{
ans=ans+a[i].p;
M=M-a[i].w;
}
else
{
ans=ans+M*a[i].x;
break;
}
}
printf("%d",ans);
return 0;
}//与上一题差不多
5-9 I - 商人小鑫
#include
#include
int a[10000001],t;
void sort(int l,int r)//快排
{
t=a[l];
int i=l,j=r;
if(l>=r)
return;
while(i=t) i++;
a[j]=a[i];
}
a[i]=t;
sort(l,i-1);
sort(i+1,r);
}
int main()
{
int n,m,i,c,p;
scanf("%d %d",&n,&m);
for(i=0; i
5-10 J - 商人的诀窍
#include
#include
struct node
{
int f,m;
double x;
}a[55],t;
void sort(int l,int r)
{
t=a[l];
int i=l,j=r;
if(l>=r)
return;
while(i=t.x) j--;
a[i]=a[j];
while(iN)
{
ans=ans+N/a[i].x;
break;
}
else
{
ans=ans+a[i].f*1.0;
N=N-a[i].m;
}
}
printf("%.3lf",ans);
return 0;
}
加油加油加油!!!