关于C语言的编程题,不知道错在哪里?

有50枚硬币,可能包括4种类型:1元,5角,1角,5分。
已知总价值为20元。求各种硬币的数量。
比如:2,34,6,8 就是一种答案。
而 2,33,15,0 是另一个可能的答案,显然答案不唯一。

你的任务是确定类似这样的不同的方案一共有多少个(包括已经给出的2个)?
# include <stdio.h>
int main() {
int i,j,k,m;
int sum=0;
for(i=0;i<=20;i++)
for(j=0;j<=40;j++)
for(k=0;k<=50-i-j;k++)
for(m=0;m<=50-i-j-k;m++)
{
if((1.0*i+0.5*j+0.1*k+0.05*m==20)&&(i+j+k+m==50))
sum++;
}
printf("%d\n",sum);
return 0;

}
本人真的是菜鸟啊,好像什么都不懂,但是写这个程序不知道错在哪里?答案应该是50,可是出来的确实0,请大神指教,狠狠地教育一下我吧!衷心感谢!

# include <stdio.h>
int main() {
int i,j,k,m;
int sum=0;
for(i=0;i<=20;i++)
for(j=0;j<=40;j++)
for(k=0;k<=50-i-j;k++)
for(m=0;m<=50-i-j-k;m++)
{
if((100*i+50*j+10*k+5*m==20*100)&&(i+j+k+m==50))/*用整数分表示,用小数就变成无法精确表示的浮点了*/
sum++;
}
printf("%d\n",sum);
return 0;

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-05
浮点数运算后是不完全精确的,你可以改一下 if语句,或者是把浮点数转化成整数(即用分做单位)。个人推荐后一种方法试一试。
相似回答