题目描述:
公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
详细描述:
接口说明
原型:
int GetResult(vector &list)
输入参数:
无
输出参数(指针指向的内存区域保证有效):
list 鸡翁、鸡母、鸡雏组合的列表
返回值:
-1 失败
0 成功
输入描述:
输入任何一个整数,即可运行程序。
输出描述:
返回vector<list<int>>中的结果。
示例:
输入:
1
输出:
0 25 75
4 18 78
8 11 81
12 4 84
解题思路:
本题是个数学问题,一百钱买一百只鸡。假设鸡翁x只,鸡母y只,鸡雏(100-x-y)只,设5x+3y+(100-x-y)/3=100,可得到y=25-7x/4,鸡数为整数,所以x为4的倍数,从0开始最多到20,但是不可能到那么高的;令鸡翁为4n,鸡母就为25-7n,鸡雏就为75+3n,然后让n从0开始递增,最多到3,因为4的话鸡母数为负数。基于此逻辑,定义GetResult函数,用list存放鸡数量,用vector存放可能的结果;再按要求输出即可。
测试代码:
#include <iostream> #include <vector> #include <list> using namespace std; int GetResult(vector<list<int>> &result) { for(int i=0;i<=3;++i) { list<int> temp; temp.push_back(4*i); // 鸡翁 temp.push_back(25-7*i); // 鸡母 temp.push_back(75+3*i); // 鸡雏 result.push_back(temp); } if(result.empty()) { return -1; } else{ return 0; } } int main() { int num; while(cin>>num) { vector<list<int>> result; if(GetResult(result)==0) { for(auto it=0;it<result.size();++it) { while(!result[it].empty()) { cout<<*(result[it].begin())<<" "; result[it].pop_front(); } cout<<endl; } } result.clear(); } return 0; }