题目描述
百鸡百钱问题描述为:用100元钱买100只鸡,已知每只公鸡5元,每只母鸡3元,3只小鸡1元,问能买多少只公鸡、母鸡和小鸡?试将该类问题用一个类来表示,百鸡百钱问题只是这个类如CChickProblem的一个实例,假设各种鸡的价格不变,类中数据成员有总钱数、要买的总的鸡数、能买到的母鸡、小鸡和公鸡的数量。成员函数有构造和析构函数,求问题解的函数findSolution,打印问题解的函数printSolution。(要求用动态数组保存问题的所有解)
编写程序求解该类问题。
输入
测试数据的组数 t
第一组 鸡数 钱数
第二组 鸡数 钱数
…
输出
第一组解个数
第一组第一个解公鸡数 母鸡数 小鸡数
第一组第二个解公鸡数 母鸡数 小鸡数
…
第二组解个数
第二组第一个解公鸡数 母鸡数 小鸡数
第二组第二个解公鸡数 母鸡数 小鸡数
…
输入样例1
2
100 100
200 200
输出样例1
3
4 18 78
8 11 81
12 4 84
7
4 43 153
8 36 156
12 29 159
16 22 162
20 15 165
24 8 168
28 1 171
代码
#include <iostream>
using namespace std;
class CChickProblem
{
private:
int num;
int money;
int *solution;
int cnt;
public:
CChickProblem(int Num,int Money)
{
cnt = 0;
num = Num;
money = Money;
solution = new int[num];
}
void findSolusion()
{
int maxGong = money / 5;
for(int gongji = 1;gongji < maxGong;gongji ++)
{
if(3 * money - num - 14 * gongji > 0 && (3 * money - num - 14 * gongji) % 8 == 0)
{
int muji = (3 * money - num - 14 * gongji) / 8;
int xiaoji = num - gongji - muji;
if(xiaoji > 0)
{
solution[cnt ++] = gongji;
solution[cnt ++] = muji;
solution[cnt ++] = xiaoji;
}
}
}
}
void printSolution()
{
cout << cnt / 3 << endl;
for(int i = 0;i < cnt ;i += 3)
{
cout << solution[i] << " " << solution[i + 1] << " " << solution[i + 2] << endl;
}
}
~CChickProblem() {delete []solution;}
};
int main()
{
int t;
cin >> t;
while(t --)
{
int Num, Money;
cin >> Num >> Money;
CChickProblem mychicken(Num, Money);
mychicken.findSolusion();
mychicken.printSolution();
}
return 0;
}