100匹马驮100块石头

现在共有100 匹马和100石头,马分三种,大马,中马,小马.其中,每匹大马每次可以驮三块石头,中马可以驮两块石头,而小马两匹才能驮一块,问需要多少匹大马,中马和小马?

一般人思路:
设:大羊需要x只,中羊需要y只,小羊需要z只
可得:
X+y+z=100;
3x+2y+0.5z=100;
2x=3y;
X=6z;
Y=4z;
......

显然这样的话,答案就是不唯一,如果我们穷举的话,简直要烦到爆炸,
但是…
如果用代码解题的话,那就简单的不要不要的:

	     let res=[]
            for(let i=0;i<=100;i+=2){
                for(let j=0;j<100-i;j++){
                    if((0.5*i)+(2*j)+((100-i-j)*3)==100){
                        res.push(("小:"+i+",中:"+j+",大:"+(100-i-j)))
                    }
                }
           }

秒秒钟的事儿啊~~~
答案:

0:"小:68,中:30,大:2"
1:"小:70,中:25,大:5"
2:"小:72,中:20,大:8"
3:"小:74,中:15,大:11"
4:"小:76,中:10,大:14"
5:"小:78,中:5,大:17"
6:"小:80,中:0,大:20"

下边详解:

//小羊必须是偶数倍数的
for(let i=0;i<=100;i+=2){
let little=0.5i;//little:小羊石头 i:小羊数量
//中羊可以一个一个加
for(let j=0;j<100-i;j++){
let zhong=2
j;//zhong:中羊石头 j:中羊数量
//确定了中,小羊就知道大羊的数量了
let bignum=100-i-j;
let big=bignum*3;//big:大羊石头 bignum:大羊数量
//当石头数相加等于100,退出
if(little+zhong+big==100){
//alert(“小:”+i+",中:"+j+",大:"+bignum)
this.res.push((“小:”+i+",中:"+j+",大:"+bignum))
}
}
}

猜你喜欢

转载自blog.csdn.net/sinat_42338962/article/details/84633380
100
今日推荐