C语言 北理工的恶龙有两个小问题

最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士... 最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数 杀死恶龙,于是找到你寻求帮助。
输入:第一行 龙头数 n , 勇士人数 m ( 1<=n, m<=100 ) 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l
输出: 如果勇士们能完成任务,输出校长需要花的最小费用;否则输 出 “bit is doomed! ”

#include<stdio.h>
int main()
{int a[100],b[100],c[100],m,n,k,i,j,t,s=0;
for(i=0;i<=99;i++)
c[i]=0;
scanf("%d %d",&n,&m);
for(k=0;k<n;k++)
scanf("%d",&a[k]);
for(k=0;k<m;k++)
scanf("%d",&b[k]);
if(m<n) printf("bit is doomed!\n");
else
{
{for(i=0;i<n;i++)
{for(j=i+1;j<n;j++)
if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
}
{for(i=0;i<m;i++)
{for(j=i+1;j<m;j++)
if(b[i]>b[j])
{t=b[i];b[i]=b[j];b[j]=t;}
}
}
t=0;
{for(i=0;i<n;i++)
{for(j=0;j<m;j++)
if(a[i]<=b[j])
{c[t]=b[j];t++;b[j]=0;break;}
}
}
if(t<n) printf("bit is doomed!\n");
else {for(i=0;i<=t;i++) s=s+c[i];printf("%d\n",s);
}
}
}

为什么要给数组C[]赋初值,要不然就是很大的数字?
为什么要加b[j]=0?
展开
 我来答
ahulxh
2013-11-07 · 知道合伙人软件行家
ahulxh
知道合伙人软件行家
采纳数:267 获赞数:805
研究生教学:数据结构与算法、计算机图形学…… 本科生教学:C语言程序设计、多媒体创作……

向TA提问 私信TA
展开全部
1 数组C[]一开始i赋初值,是因为刚定义的数组里面是随机值,可能会出现很大的数字,而后面挑选时,c[t]并非让所有的c数组元素都重新赋值,这样s累加便会出错。

2 每挑选出一个b[j],将其赋0,是为了避免后面重新又挑到它。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式