写点什么

笔试题:代码如何实现“百钱买百鸡”?

用户头像
田维常
关注
发布于: 2020 年 11 月 02 日

关注Java 后端技术全栈”**


回复“面试”获取全套大厂面试资料


百钱买百鸡是一个非常经典的不定方程问题,最早源于我国古代的《算经》,这是古代著名数学家张丘建首次提出的。在笔试题中出现频率也也非常高,所以今天咱们就来聊来这个很有意思的算法题。


百钱买百鸡问题的原文如下:


鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?


这个问题的大致意思是公鸡 5 块钱 1 只,母鸡 3 块钱 1 只,小鸡 3 只 1 块钱,如果用 100 块钱买 100 只鸡,那么公鸡、母鸡和小鸡各应该买多少只呢?


理清思路


百钱买百鸡问题中,两大变量:总钱数量和总鸡数量


总鸡数量可分为三个变量:公鸡数量、母鸡数量和小鸡数量,分别设为 x、y 和 z。


这三者应该满足如下关系:


x+y+z=总鸡数量

5x+3y+z/3=总钱数量


这里有三个变量,两个方程,因此是一个不定方程问题。这将导致求解的结果不只一个。可以根据上述两个方程来求出所有可能的结果。


代码实现


public class BuyChicken {    public static void main(String[] args) {        int m = 100;        int n = 100;        System.out.printf("使用总钱 %d 可以总鸡数量 %d 医用有以下几种方案:n", m, n);        buyChicken(m, n);    }    public static void buyChicken(int m, int n) {        int x;        int y;        int z;        for (x = 0; x <= n; x++) {//公鸡数量            for (y = 0; y <= n; y++) {//母鸡数量                z = n - x - y;//小鸡数量                if (z > 0 && z % 3 == 0 && (x * 5 + y * 3 + (z / 3)) == m) {                    System.out.printf("公鸡:%d 母鸡:%d 小鸡:%d n", x, y, z);                }            }        }    }}
复制代码


输出:


使用总钱 100 可以总鸡数量 100 有以下几种方案:公鸡:0 母鸡:25 小鸡:75公鸡:4 母鸡:18 小鸡:78公鸡:8 母鸡:11 小鸡:81公鸡:12 母鸡:4 小鸡:84
复制代码


输入参数 m 为钱数,输入参数 n 为购买的鸡数。程序中,通过两层循环来穷尽公鸡数量和母鸡数量,然后在 if 语句中判断是否满足方程的条件。如果满足条件,则表示是一种解,将其输出。


ok,今天的算法题就到这里。小小乐趣!


推荐阅读


《数据结构与算法分析:Java语言描述》.pdf


算法——基础学习资料 PDF 版下载


面试问你Spring如何解决循环依赖的时候,不要一脸懵逼了!



发布于: 2020 年 11 月 02 日阅读数: 28
用户头像

田维常

关注

关注公众号:Java后端技术全栈,领500G资料 2020.10.24 加入

关注公众号:Java后端技术全栈,领500G资料

评论

发布
暂无评论
笔试题:代码如何实现“百钱买百鸡”?