杭电题目21题,题目链接就不放在这里了,主要说下思路、
我的思路:如果要求最少的钞票数目,应该将每个人的工资从高到低分别从100,50,10,5,2,1开始安排。举个例子。比如要安排521的金额,那么从最大数字100开始,100元5张,接着将原来的金额除以100的余数除以50,得到0张,接着再用这个数字除以10,得到2张,最后除以1,得到1张。
将所有的张数加起来即为最少的数目。
代码中比较好的处理方式:直接在每一次运算之后,令原始的金额数重新赋值,如x[i]%=50;
这样做的话,免去了定义许多变量的麻烦。
直接令count加上金额指张数,也免去了循环加并且定义变量的麻烦。比较简练。
在不需要求解中间数值,只需要找到最终累加结果的题目比较适用。
代码如下:
#include<stdio.h>
int main()
{
int n,a[100];
while(scanf("%d",&n)!=EOF)
{
int i=1,b1,b2,b3,b4,b5,b6,c=0;
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b1=a[i]/100;
if(b1==0)
b2=a[i]/50;
else b2=b1/50;
if(b2==0)
b3=a[i]/10;
else
b3=b2/10;
if(b3==0)
b4=a[i]/5;
else b4=b3/5;
if(b4==0)
b5=a[i]/2;
else b5=b4/2;
if(b5==0)
b6=a[i]/1;
else b6=b5/1;
c=c+b1+b2+b3+b4+b5+b6;
}
printf("%d\n",c);
}
return 0;
}