4块砝码的重量(上)

有这样一道题:


一位商人有一个40磅的砝码,由于跌落在地而碎成4块。后来,称得每块碎片的重量都是整磅数,而且可以用这4块来称从1至40磅之间的任意整数磅的重物。

4块砝码的重量(上)

问:这4块砝码碎片各重多少?

4块砝码的重量(上)

这道题大家不要觉得很难,其实仔细推理一下,很快就能解决。


现在让我们搞定它。


首先设四块分别为A、B、C、D,重量大小A≥B≥C≥D。


①40磅肯定是四块之和,A+B+C+D=40


②39磅肯定是四块之中最重的三块之和,即:A+B+C=39,则D=1


OK,现在四块分别为A、B、C、1,且A+B+C=39


③38磅肯定是最重的三块-最轻的一块:A+B+C-1=39-1=38


④37磅肯定是最重的二块+最轻的一块:A+B+1=37,则A+B=36


因为A+B+C=39,A+B=36,则C=3,四块分别是:A、B、3、1


⑤36磅:A+B=36


⑥35磅:A+B-1=35


⑦34磅:A+B+1-3=34


⑧33磅:A+B-3=33


⑨32磅:A+B-1-3=32


⑩31磅:这个肯定是最重的一块+最轻的二块:A+3+1=31,则A=27


四块分别是27、B、3、1,最后,B=36-27=9


四块砝码的重量分别是27磅、9磅、3磅、1磅。


OK,现在用编程的方法验证一下:


①当输入:1/3/9/27时,1-40的方格全部填充完毕,说明做对了!

4块砝码的重量(上)

②用别的数字试验一下,看看结果:

当输入:1/5/10/24时,有的方格无法填充,说明用它们无法表示对应的数字。

4块砝码的重量(上)

当输入:2/5/7/12时,有的方格无法填充,说明用它们无法表示对应的数字。

4块砝码的重量(上)

③代码如下,大家可以自己试一试:

(新建一个文本文档,复制下面的代码,然后保存退出,把文件名后缀改成.html,用浏览器打开,就可以执行程序了)



输入数字

<button>

"t(d1.value,d2.value,d3.value,d4.value)">

确定

/<button>

<canvas>

height="400">

/<canvas>


function t(a,b,c,d){


var v=document.getElementById("myCanvas");

var cxt=v.getContext("2d");

cxt.fillStyle="#FF0000";

cxt.strokeStyle="#000000";

cxt.textAlign="left";

cxt.font="30px Arial";

var x;

var y;


document.getElementById("d0").innerHTML = a+"+"+b+"+"+c+"+"+d+"="+(1*a+1*b+1*c+1*d);


for(x1=-1;x1<2;x1++){

for(x2=-1;x2<2;x2++){

for(x3=-1;x3<2;x3++){

for(x4=-1;x4<2;x4++){


x=x1*a+x2*b+x3*c+x4*d;

y=x1*1+x2*3+x3*9+x4*27;


if(y>0&y<=20)

{

cxt.strokeRect(40*y,50,32,32);

cxt.fillText(y,40*y,120);

}

else

{

cxt.strokeRect(40*y-800,200,32,32);

cxt.fillText(y,40*y-800,270);

}

if(x>0&x<=20)

cxt.fillRect(40*x,50,30,30);

else

cxt.fillRect(40*x-800,200,30,30);

}

}

}

}

}


分享到:


相關文章: