分别用粗略的算法以及优化后的列举算法,实现“百元买百鸡的问题”,即“公鸡5元一只,母鸡3元一只,小鸡1元三只,现有100元,要求买100只鸡。求有多少种购鸡方案。”
分析:这个问题其实很简单,怎么说呢,有点类似小时候的鸡兔同笼,通过利用头和脚的数目,求鸡和兔各有多少个,而这个百元买百鸡的问题,也算是同样的道理,通过公鸡的最大值作为上限,进行外循环,母鸡上限作为内循环,而小鸡=100-(母鸡的个数+公鸡的个数),最后在判断一下是否符合题目的要求——百元买百鸡,即可;
代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
/*
i为公鸡个数;
j为母鸡个数;
k为小鸡个数。
*/
int main(void)
{
int max_gj, max_mj;
max_gj = 100 / 5; //100块钱最多买多少只公鸡 20只
max_mj = 100 / 3; //100块钱最多买多少只母鸡 33只
int k = 0;
int m = 0; //多少种购鸡方案
for (int i = 0; i <= max_gj; i++)
{
for (int j = 0; j <= max_mj; j++)
{ k = 100 - i - j; //计算小鸡的个数=100-(母鸡+公鸡)
if ((k%3==0)&&(5 * i + 3 * j + k / 3 == 100)) //判断小鸡个数是否符合一块3个小鸡 和 总花费的金钱时候等于100
{
cout << "公鸡:" << i << "只\t" << "母鸡:" << j << "只\t"<<"小鸡:" << k << "只\t" << endl;
m++;
}
}
}
cout <<"\n共有:"<< m<<"种购鸡方案" << endl;
system("pause");
return 0;
}