C语言问题

50元兑换成5元,2元和1元的计算方法有多少种?

我自己写了一个程序 但是运行出来的结果好像和标准答案不大一样 我觉得我的思路是对的 求大神帮我解惑

main()
{int a,b,c,sum=0;
for(a=0;a<=10;a++)
for(b=0;b<=25;b++)
{c=50-5*a-2*b;
if((5*a+2*b+c)==50)
sum++;
}
getch();
printf("%d\n",sum);
}
下面的这个是给出的标准答案
main( )
{ int x,f,t,n;
x=0;f=0;
while(f<=10)
{t=0;while (t<=25)
{n=50—f*5—T*2;
if(n>=o)x++;
t++:}
f++;}
printf(“%d”,x);
}
答案:146
我先前给的这个程序 答案是286

main()

{

int a,b,c,sum=0;

 for(a=0;a<=10;a++)

 for(b=0;b<=25;b++)

 for(c=0;c<=50;c++)

 {

 

  if((5*a+2*b+c)==50)

  sum++;

printf("%3d%4d%5d&#92;n",a,b,c);

 }

printf("%d&#92;n",sum);

}


改成这样就可以避免你说的那种困境了,你没有指定c的范围,运行出来就会有负数参与的。


温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-24
你还忘了一个条件c要大于等于0;if((5*a+2*b+c)==50)改为if(((5*a+2*b+c)==50)&&c>=0).
第2个回答  2013-05-24
int类型含负数。你的c去到负数,a,b才满足条件停止,自然数出的数偏大了。呵呵
相似回答