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

简介: 华为机试HJ72:百钱买百鸡问题

题目描述:

公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

详细描述:

接口说明

原型:

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;
}


相关文章
|
10月前
7-10 百钱百鸡
百鸡问题:“今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买鸡百只,问鸡翁母雏各几何。” 百鸡问题是北魏数学家张丘建在《张丘建算经》中提出的一个世界著名的不定方程问题,它给出了由三个未知量的两个方程组成的不定方程组的解。
99 0
7-10 百钱百鸡
|
8月前
|
算法
华为机试HJ76:尼科彻斯定理
华为机试HJ76:尼科彻斯定理
|
8月前
|
测试技术
华为机试HJ77:火车进站
华为机试HJ77:火车进站
|
8月前
|
机器学习/深度学习 算法 数据安全/隐私保护
华为机试HJ28:素数伴侣
华为机试HJ28:素数伴侣
|
9月前
HJ76--尼科彻斯定理
HJ76--尼科彻斯定理
67 0
|
12月前
百钱买百鸡
百钱买百鸡
56 0
|
缓存
【八月】每日一题 - 640. 求解方程
【八月】每日一题 - 640. 求解方程
74 0
|
定位技术 容器
PTA天梯训练赛一&二
PTA天梯训练赛一&二
89 0

热门文章

最新文章