百钱买百鸡,一百块钱,买一百只鸡,公鸡一只五元,母鸡一只三元,小鸡一元三只,求应各买多少?
这是一个简单的循环嵌套决问题,常最规的思路是用三层循环来枚举寻找符合条件的 公鸡、母鸡、小鸡的数量,代码如下(输出结果在文章最后):
C++;
#include <iostream>
using namespace std;
int main()
{
int x=0,y=0,z=0;//x,y,z分别表示公鸡,母鸡和小鸡的数量
system("pause");
for( x=0; x<20; x++)//公鸡的最大数量上限为20只
for( y=0; y<33; y++)//母鸡的最大数量上限为33只
for( z=0; z<100; z++)//小鸡的最大数量上限为100只(最多只要100只鸡)
{
if( (z%3==0) && (x+y+z==100) && (5*x+3*y+z/3==100) )
{
cout<<"方案"<<i<<":"<<endl;
cout<<"公鸡="<<x<<"\n母鸡="<<y<<"\n小鸡="<<z<<endl;
i++;
cout<<endl;
}
}
return 0;
}
接下来减少一层循环,用两层循环;
#include <iostream>
using namespace std;
int main()
{
int x=0,y=0,z=0;//x,y,z分别表示公鸡,母鸡和小鸡的数量
int i=1;//用于表示方案的种类
system("pause");
for( x=0; x<20; x++)
for( y=0; y<33; y++)
{
z = 100-x-y;//三者数量为100,小鸡(z)=100-公鸡-母鸡
if( (z%3==0) && (x+y+z==100) && (5*x+3*y+z/3==100) )
{
cout<<"方案"<<i<<":"<<endl;
cout<<"公鸡="<<x<<"\n母鸡="<<y<<"\n小鸡="<<z<<endl;
i++;
cout<<endl;
}
}
return 0;
}
最后是用一层循环,在此之前,需要列一个方程组,将其他两个变量都用剩下的那一个变量来表示,这样就能把三个变量变为一个变量,在此我们都用x(即公鸡的数量)来表示吧;
所列方程组如下:
5*x + 3*y + z/3 = 100;
x + y + z = 100;
运用一下加减消元法,可以得出y = (100 - 7 * x) / 4, z = (300 + 3 * x) / 4,这样一来的话,只有一个变量x了;我们用一层循环就可以实现了。另外,由于要满足y>=0的,所以y = (100 - 7 * x) / 4>=0可以得出x<=15;如果不限制这个条件的话,当x=16的时候y=-3,z=87也会符合条件,显然这与事实不符合(数量为负数),代码如下:
#include <iostream>
using namespace std;
int main()
{
int x=0,y=0,z=0;//x,y,z分别表示公鸡,母鸡和小鸡的数量
int i=1;//用于表示方案的种类
system("pause");
for( x=0; x<=20; x++)
{
y = (100 - 7 * x) / 4;
z = (300 + 3 * x) / 4;
if( (z%3==0) && (x+y+z==100) && (5*x+3*y+z/3==100) )
{
cout<<"方案"<<i<<":"<<endl;
cout<<"公鸡="<<x<<"\n母鸡="<<y<<"\n小鸡="<<z<<endl;
i++;
cout<<endl;
}
}
return 0;
}
结果如下: