C++练习:任意鸡任意钱问题(构造与析构)

百鸡百钱问题描述为:用100元钱买100只鸡,已知每只公鸡5元,每只母鸡3元,3只小鸡1元,问能买多少只公鸡、母鸡和小鸡?试将该类问题用一个类来表示,百鸡百钱问题只是这个类如CChickProblem的一个实例,假设各种鸡的价格不变,类中数据成员有总钱数、要买的总的鸡数、能买到的母鸡、小鸡和公鸡的数量。成员函数有构造和析构函数,求问题解的函数findSolution,打印问题解的函数printSolution。(要求用动态数组保存问题的所有解)

编写程序求解该类问题。

输入

测试数据的组数 t

第一组 鸡数 钱数

第二组 鸡数 钱数

输出

第一组解个数

第一组第一个解公鸡数 母鸡数 小鸡数

第一组第二个解公鸡数 母鸡数 小鸡数

第二组解个数

第二组第一个解公鸡数 母鸡数 小鸡数

第二组第二个解公鸡数 母鸡数 小鸡数

输入

2
100 100
200 200

输出

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 chick;
    int money;
    int *s;
public:
    CChickProblem(int c,int m):chick(c),money(m)  {	}
	~CChickProblem()
	{
		delete []s;
	}
    void findSolution()
	{
	    int gongji=money/5;
	    int muji=money/3;
	    int xiaoji=chick;
	    int n=xiaoji; 
	    s = new int[n+1];
	    s[0]=0;
	    int i,j,z,k=1;
	    for(i=1;i<gongji;i++)
	    {
	        for(j=1;j<muji;j++)
	        {
	            z=chick-i-j;
	            if(z%3==0 && 5*i+3*j+z/3==money)
	            {
	                s[0]++;
	                s[k++]=i;
	                s[k++]=j;
	                s[k++]=z;
	            }
	        }
	    }
	}
	
    void printSolution()
    {
	    cout<<s[0]<<endl;
	    for(int i=0;i<s[0];i++)
	    {
	        cout<<s[3*i+1]<<" "<<s[3*i+2]<<" "<<s[3*i+3]<<endl;
	    }
	}
};

int main()
{
    int t;
    cin>>t;
    while (t--)
    {
        int chick,money;
        cin>>chick>>money;
        CChickProblem c(chick,money);
        c.findSolution();
        c.printSolution();
    }
    return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值