我这个百钱问题代码哪里有问题呢?
#include<iostream>usingnamespace std;
int main()
{
int n=1;
int sum=0;
for(int i=0;i<=20;i++)
for(int j=0;j<=50;j++)
for(int k=0;k<=100;k++)
{
if(i*0.05+j*0.02+k*0.01==1)
sum+=1;
}
cout<<"一共有"<<sum<<"种换法"<<endl;
return 0;
} 什么是百钱问题?
人造人 发表于 2022-7-31 16:31
什么是百钱问题?
就是把一元钱换成1,2,5分的硬币有多少种换法
没问题啊 tommyyu 发表于 2022-7-31 17:41
没问题啊
但我这个运行出来是528,正确的应该是541 将 if(i*0.05+j*0.02+k*0.01==1)改为 if(i*5+j*2+k*1==100)
因为C语言、C++的小数运算没有那么精确,能不用小数的就不用小数 C/C++中小数由于储存而导致计算不准,if(i*5+j*2+k*1==100)就比if(i*0.05+j*0.02+k*0.01==1)好很多
还有强制转换的原因 谢谢各位
页:
[1]