关注 “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 如何解决循环依赖的时候,不要一脸懵逼了!