华为机试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:百钱买百鸡问题的主要内容,如果未能解决你的问题,请参考以下文章

华为机试题 HJ72百钱买百鸡问题

华为OJ平台——百钱买百鸡问题

C语言试题七十六之请编写函实现百钱买百鸡

C语言试题七十六之请编写函实现百钱买百鸡

百钱买百鸡

C语言程序设计百钱买百鸡(百钱百鸡,百鸡问题)!