百鸡问题。公鸡每只5¥,母鸡每只3¥,每3只小鸡1¥,100¥买100只鸡。
穷举法
代码1
int main(){
int x,y,z;
cout<<"cock\t"<<"hen\t"<<"chick\t"<<endl;
for(x=0;x<20;x++){
for(y=0;y<33;y++){
z=100-x-y;
if(x*5+y*3+z/3.0==100){
cout<<x<<'\t'<<y<<'\t'<<z<<endl;
}
}
}
}
cock hen chick
0 25 75
4 18 78
8 11 81
12 4 84
代码2
int main(){
int x,y,z;
cout<<"cock\t"<<"hen\t"<<"chick\t"<<endl;
for(x=0;x<20;x++){
for(y=0;y<33;y++){
z=100-x-y;
if(x*5+y*3+z/3==100){
cout<<x<<'\t'<<y<<'\t'<<z<<endl;
}
}
}
}
cock hen chick
0 25 75
3 20 77
4 18 78
7 13 80
8 11 81
11 6 83
12 4 84
为什么会出现如此情况
验证
int x=10;
int y = 3;
double a=10.0;
double b=3.0;
cout<<x/y<<endl;
cout<<a/b<<endl;
cout<<x/b<<endl;
3
3.33333
3.33333
两整数相除会舍去小数
所以代码1,代码2的3.0和3不同就是如此情况
这其实也是每3个小鸡1¥的难点解决方法