有这样一道题:
一位商人有一个40磅的砝码,由于跌落在地而碎成4块。后来,称得每块碎片的重量都是整磅数,而且可以用这4块来称从1至40磅之间的任意整数磅的重物。
问:这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的方格全部填充完毕,说明做对了!
②用别的数字试验一下,看看结果:
当输入:1/5/10/24时,有的方格无法填充,说明用它们无法表示对应的数字。
当输入:2/5/7/12时,有的方格无法填充,说明用它们无法表示对应的数字。
③代码如下,大家可以自己试一试:
(新建一个文本文档,复制下面的代码,然后保存退出,把文件名后缀改成.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);
}
}
}
}
}
閱讀更多 數學與編程 的文章
關鍵字: 重量 浏览器 JavaScript