题解 | #百钱买百鸡问题#

百钱买百鸡问题

http://www.nowcoder.com/practice/74c493f094304ea2bda37d0dc40dc85b

百钱买百鸡问题

描述

公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
现要求你打印出所有花一百元买一百只鸡的方式。
输入描述:
输入任何一个整数,即可运行程序。
输出描述:
 输出有数行,每行三个整数,分别代表鸡翁,母鸡,鸡雏的数量
示例
输入:1
输出:
0 25 75
4 18 78
8 11 81
12 4 84

方法一

思路分析

根据描述整理得到:共有100元,鸡翁,母鸡,鸡雏的数量之和为100
  • 一只鸡翁5元,设置鸡翁数量为i,总数不能超过20只;
  • 一只母鸡3元,设置母鸡数量为j,总数不能超过33只;
  • 三只小鸡1元,设置小鸡数量为k,总数不能超过300只;
因此三层嵌套循环遍历,判定条件为:
  • 三类鸡的总数是为100;
  • 总钱数是否为100,变换条件如下:5*i+3*j+k/3==100\Leftrightarrow15*i+9*j+k==300
  • 鸡雏的数量是否为3的倍数

核心代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    if(n>0)
    {
        int i=0,j=0,k=0;
        for(i=0;i<=20;i++)
        {
            for(j=0;j<=33;j++)
            {
                for(k=0;k<=300;k++)
                {
                    if(k%3==0&&15*i+j*9+k==300&&i+j+k==100)//判断三类鸡的总数是为100,总钱数是否为100,还要判断鸡雏的数量是否为3的倍数
                    cout<<i<<" "<<j<<" "<<k<<endl;
                }
                
            }
        }
    }
}
复杂度分析
  • 时间复杂度:三层嵌套循环,为$O(20*33*300)$,总的时间复杂度为$O(1)$
  • 空间复杂度:空间复杂度为$O(1)$

方法二

思路分析

实际上遍历鸡翁,母鸡的数量之后,直接可以计算出符合条件的小鸡的数量,判定条件也减少

图解

核心代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    if(n>0)
    {
        int i=0,j=0,k=0;
        for(i=0;i<=20;i++)
        {
            for(j=0;j<=33;j++)
            {
                k=100-i-j;//小鸡的数量
                if(15*i+j*9+k==300)//判断花费是否为100
                    cout<<i<<" "<<j<<" "<<k<<endl;
            }
        }
    }
}
复杂度分析
  • 时间复杂度:两层嵌套循环,为$O(20*33)$,时间复杂度为$O(1)$
  • 空间复杂度:空间复杂度为$O(1)$

方法三

思路分析+图解

根据前面的推导,我们希望继续减小循环嵌套,因此做如下推导:因此只需要遍历k即可。


核心代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    if(n>0)
    {
        int i=0,j=0,k=0;
        for(int m=0;m<=5;m++)
        {
            i=4*m;//鸡翁
            j=25-7*m;//母鸡
            k=75+3*m;//小鸡
            if(j>=0)
               cout<<i<<" "<<j<<" "<<k<<endl;
               
            
        }
    }
}
复杂度分析
  • 时间复杂度:只需要一次循环,时间复杂度为$O(1)$,相比于前两种方法,时间又减小了
  • 空间复杂度:空间复杂度为$O(1)$




全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
13730次浏览 132人参与
# AI面会问哪些问题? #
813次浏览 19人参与
# 米连集团26产品管培生项目 #
6871次浏览 223人参与
# 你的实习产出是真实的还是包装的? #
2431次浏览 47人参与
# AI时代,哪个岗位还有“活路” #
2495次浏览 49人参与
# 长得好看会提高面试通过率吗? #
2446次浏览 39人参与
# 巨人网络春招 #
11461次浏览 224人参与
# 你做过最难的笔试是哪家公司 #
1020次浏览 18人参与
# HR最不可信的一句话是__ #
914次浏览 31人参与
# 沪漂/北漂你觉得哪个更苦? #
908次浏览 29人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7898次浏览 43人参与
# XX请雇我工作 #
51120次浏览 171人参与
# 简历中的项目经历要怎么写? #
310766次浏览 4252人参与
# 简历第一个项目做什么 #
31981次浏览 354人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152726次浏览 888人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187486次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64398次浏览 857人参与
# 如果重来一次你还会读研吗 #
229937次浏览 2011人参与
# 正在春招的你,也参与了去年秋招吗? #
364032次浏览 2640人参与
# 腾讯音乐求职进展汇总 #
160794次浏览 1114人参与
# 你怎么看待AI面试 #
180527次浏览 1287人参与
# 投格力的你,拿到offer了吗? #
178044次浏览 889人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务