华为机试HJ72:百钱买百鸡问题
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ72:百钱买百鸡问题相关的知识,希望对你有一定的参考价值。
作者:Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
题目描述:
公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
详细描述:
接口说明
原型:
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;
}
以上是关于华为机试HJ72:百钱买百鸡问题的主要内容,如果未能解决你的问题,请参考以下文章