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);

}

}

}

}

}


分享到:


相關文章: