ZXPoo 发表于 2022-7-31 16:23:47

我这个百钱问题代码哪里有问题呢?

#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:07

什么是百钱问题?

ZXPoo 发表于 2022-7-31 16:53:59

人造人 发表于 2022-7-31 16:31
什么是百钱问题?

就是把一元钱换成1,2,5分的硬币有多少种换法

tommyyu 发表于 2022-7-31 17:41:17

没问题啊

ZXPoo 发表于 2022-7-31 17:46:29

tommyyu 发表于 2022-7-31 17:41
没问题啊

但我这个运行出来是528,正确的应该是541

tommyyu 发表于 2022-7-31 17:59:58

将 if(i*0.05+j*0.02+k*0.01==1)改为 if(i*5+j*2+k*1==100)

因为C语言、C++的小数运算没有那么精确,能不用小数的就不用小数

aaron0919 发表于 2022-7-31 21:53:50

C/C++中小数由于储存而导致计算不准,if(i*5+j*2+k*1==100)就比if(i*0.05+j*0.02+k*0.01==1)好很多
还有强制转换的原因

ZXPoo 发表于 2022-7-31 22:24:51

谢谢各位
页: [1]
查看完整版本: 我这个百钱问题代码哪里有问题呢?