有這樣一道題:
一位商人有一個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