当前位置:首页 » 《随便一记》 » 正文

华为机试HJ72:百钱买百鸡问题_翟天保的博客

29 人参与  2021年11月06日 15:43  分类 : 《随便一记》  评论

点击全文阅读


作者: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;
}

点击全文阅读


本文链接:http://zhangshiyu.com/post/30559.html

鸡雏  输出  描述  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1