百钱百鸡问题,又叫百钱买百鸡,是一个著名的数学问题,主要内容是: 用100元钱买100只鸡,公鸡、母鸡、小鸡都要有。公鸡5元1只;母鸡3元1只;小鸡1元3只,请问公鸡母鸡小鸡各应该买多少只?
通常想法便是三重循环嵌套:
#include <iostream>
using namespace std;
int main()
{
for (int a=0; a<=100; a++)
{
for (int b=0; b<=100; b++)
{
for (int c=0; c<=300; c++)
{
if (a*5+b*3+c/3==100 && a+b+c==100 && c%3==0)
{
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
}
#include <iostream>
using namespace std;
int main()
{
for (int a=0; a<=100; a++)
{
for (int b=0; b<=100; b++)
{
for (int c=0; c<=300; c++)
{
if (a*5+b*3+c/3==100 && a+b+c==100 && c%3==0)
{
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
}
但是仔细想后会发现,变量c其实等于100(总鸡数)-a(公鸡数)-b(母鸡数)。
所以可以改进成以下代码:
#include <iostream>
using namespace std;
int main()
{
for (int a=0; a<=100; a++)
{
for (int b=0; b<=100; b++)
{
int c=100-a-b;
if (a*5+b*3+c/3==100 && a+b+c==100 && c%3==0 && c>=0)
{
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
#include <iostream>
using namespace std;
int main()
{
for (int a=0; a<=100; a++)
{
for (int b=0; b<=100; b++)
{
int c=100-a-b;
if (a*5+b*3+c/3==100 && a+b+c==100 && c%3==0 && c>=0)
{
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
以上就是百钱百鸡问题的解。