项目场景:
百钱买百鸡(穷举法)
问题描述
其中几条并不符合百钱买百鸡的要求
#include<stdio.h>
int main()
{
int x,y,z;
for(x=0;x<=20;x++)
{
for(y=0;y<=33;y++)
{
for(z=0;z<=100;z++)
if(x+y+z==100&&5*x+3*y+z/3==100)
printf("可以买公鸡%d,母鸡%d,小鸡%d\n",x,y,z);
}
}
return 0;
}
原因分析:
在小鸡价格计算时,int型相除直接取整,既算入了不符合的情况,if的与条件判断中两个判断条件应加上括号
解决方案:
将除3变为除3.0,100也化为100.0,算取的结果更加精确
#include<stdio.h>
int main()
{
int x,y,z;
for(x=0;x<=20;x++)
{
for(y=0;y<=33;y++)
{
for(z=0;z<=100;z++)
if((x+y+z==100)&&(5*x+3*y+z/3.0==100.0))
printf("可以买公鸡%d,母鸡%d,小鸡%d\n",x,y,z);
}
}
return 0;
}

该博客介绍了如何使用穷举法解决经典的百钱买百鸡问题。程序员通过调整代码,修正了小鸡价格计算的错误,避免了不符合条件的解。在原始代码中,整数除法导致了结果不准确,解决方案是将除法操作改为浮点数除法,确保结果精确匹配。更新后的代码能够正确输出所有可能的公鸡、母鸡和小鸡的组合。
12万+

被折叠的 条评论
为什么被折叠?



