一百个铜钱买了一百只鸡,其中母鸡一只5钱、公鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)。
这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:
这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z的取值范围:
1) x的取值范围为1~20
2) y的取值范围为1~33
3) z的取值范围为3~99,步长为3
对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。当然也可以简化算法去完成这个问题。
for (var i = 0; i <= 20; i++) {//母鸡
for (var j = 0; j <= 33; j++) {//公鸡
var m = (100 - j - i);剩下的就是小鸡
if (i * 5 + j * 3 + m * (1 / 3) == 100 && i * j * m > 0) {//判断总金额为100,每一种都不能为0
console.log(i, j, m);
}
}
}
另一种写法
for (var i = 0; i < 20; i++) {//母鸡最多能买20只
for (var j = 0; j < 33; j++) {//公鸡最多能买33只
for (var m = 0; m <= 300; m++) {小鸡最多能买300只
if (i * 5 + j * 3 + m * (1 / 3) == 100 && i * j * m != 0 && i + j + m == 100) {//判断总金额为100,每一种都不能为0
console.log(i, j, m)
}
}
}
}