这个是这道题的题目
做题思路:我开始是想到分类,分为大于一百,小于一百,小于一百中又有大于五十,小于五十,然后还有大于十和小于十,然后小于十的用switch来实现
本题收获:初步想到这个方法时,我觉得这个题并没有难度,但是这个题目却提醒了我优先进行算法优化的重要性我开始以为这个题目很简单,所以花费了超过预想时间的一倍,主要花费在于分类时结构的嵌套和纠错,这个题目由于算法过于繁琐,导致输入代码实现功能时花费了大量的时间。
这道题还需要进行优化,这个是现在的问题
以下为代码:
#include
int main()
{
int n,i,a[100],j,b,c,d,e,f;
n=1;
while(n!=0)//结束代码
{
scanf("%d",&i);
scanf("%d",&a[i]);
for(j=0;j
{
b=a[j]/100;//是加一的还是减一的?
if(b>1)//百元 b张 ,大于100
{
c=a[j]/10-10*b;//十分位的
if(c>5)//大于50
{
d=c-5;//十元d张
e=a[j]-100*b-50*c-10*d;
switch(e)
case 9:printf("%d\n",b+c+d+3);break;
case 8:printf("%d\n",b+c+d+3);break;
case 7:printf("%d\n",b+c+d+2);break;
case 6:printf("%d\n",b+c+d+2);break;
case 5:printf("%d\n",b+c+d+1);break;
case 4:printf("%d\n",b+c+d+2);break;
case 3:printf("%d\n",b+c+d+2);break;
case 2:printf("%d\n",b+c+d+1);break;
case 1:printf("%d\n",b+c+d+1);break;
case 0:printf("%d\n",b+c+d);break;
default:break;
}
else//小于50
{
e=a[j]-100*b-10*c;
switch(e)
case 9:printf("%d\n",b+c+3);break;
case 8:printf("%d\n",b+c+3);break;
case 7:printf("%d\n",b+c+2);break;
case 6:printf("%d\n",b+c+2);break;
case 5:printf("%d\n",b+c+1);break;
case 4:printf("%d\n",b+c+2);break;
case 3:printf("%d\n",b+c+2);break;
case 2:printf("%d\n",b+c+1);break;
case 1:printf("%d\n",b+c+1);break;
case 0:printf("%d\n",b+c);break;
default:break;
}
}
else//小于100
{
c=a[j]/10;//五十元c张
if(c>5)//大于50
{
d=c-5;//十元d张
e=a[j]-50*c-10*d;
switch(e)
case 9:printf("%d\n",c+d+3);break;
case 8:printf("%d\n",c+d+3);break;
case 7:printf("%d\n",c+d+2);break;
case 6:printf("%d\n",c+d+2);break;
case 5:printf("%d\n",c+d+1);break;
case 4:printf("%d\n",c+d+2);break;
case 3:printf("%d\n",c+d+2);break;
case 2:printf("%d\n",c+d+1);break;
case 1:printf("%d\n",c+d+1);break;
case 0:printf("%d\n",c+d);break;
default:break;
}
else//小于50
{
e=a[j]-10*c;
switch(e)
case 9:printf("%d\n",c+3);break;
case 8:printf("%d\n",c+3);break;
case 7:printf("%d\n",c+2);break;
case 6:printf("%d\n",c+2);break;
case 5:printf("%d\n",c+1);break;
case 4:printf("%d\n",c+2);break;