利用PHP編程驻债,對一道數(shù)學(xué)題的答案探究
題
這是一道三年級的數(shù)學(xué)題:用0至9這十個數(shù)字,組成一道加法豎式强衡。
編程思考
這道題,我用PHP編程漩勤,找出了所有的可能感挥。程序代碼部分,只有30多行越败,用了多層嵌套触幼,如圖:
代碼
<?php
echo "題:將0至9填入加法豎式,三位數(shù)+三位數(shù)=四位數(shù)究飞。<br />";
$i=0;
for($s1b=1;$s1b<=9;$s1b++ ){
$ss=array(0,1,2,3,4,5,6,7,8,9);//設(shè)置數(shù)字0至9
for($s1s=0;$s1s<=9;$s1s++ ){
if($s1s==$s1b) continue;
for($s1g=0;$s1g<=9;$s1g++ ){
if($s1g==$s1b || $s1g==$s1s) continue;
for($s2b=1;$s2b<=9;$s2b++ ){
if($s2b==$s1b || $s2b==$s1s || $s2b==$s1g) continue;
for($s2s=0;$s2s<=9;$s2s++ ){
if($s2s==$s1b || $s2s==$s1s || $s2s==$s1g || $s2s==$s2b) continue;
for($s2g=0;$s2g<=9;$s2g++ ){
if($s2g==$s1b || $s2g==$s1s || $s2g==$s1g || $s2g==$s2b || $s2g==$s2s) continue;
$s1 = $ss[$s1b]*100+$ss[$s1s]*10+$ss[$s1g];
$s2 = $ss[$s2b]*100+$ss[$s2s]*10+$ss[$s2g];
$s3 = $s1 + $s2;
if($s3 > 999){
$s3q = floor($s3/1000);
if($s3q==$s1b || $s3q==$s1s || $s3q==$s1g || $s3q==$s2b || $s3q==$s2s || $s3q==$s2g) continue;
$s3b = floor($s3/100) - $s3q*10;
if($s3b==$s1b || $s3b==$s1s || $s3b==$s1g || $s3b==$s2b || $s3b==$s2s || $s3b==$s2g || $s3b==$s3q) continue;
$s3s = floor($s3/10) - $s3q*100 - $s3b*10;
if($s3s==$s1b || $s3s==$s1s || $s3s==$s1g || $s3s==$s2b || $s3s==$s2s || $s3s==$s2g || $s3s==$s3q || $s3s==$s3b) continue;
$s3g = $s3 % 10;
if($s3g==$s1b || $s3g==$s1s || $s3g==$s1g || $s3g==$s2b || $s3g==$s2s || $s3g==$s2g || $s3g==$s3q || $s3g==$s3b || $s3g==$s3s) continue;
if($s1<($s3/2)){
echo $s1."+".$s2."=".$s3;
$i=$i+1;
if(($i % 4) == 0) echo "<br />";
else echo " ";
}
}
}
}
}
}
}
}
?>
代碼解析
我用兩個變量分別存儲兩個加數(shù)置谦,命名為s1堂鲤、s2,并且把每個加數(shù)各個數(shù)位上的數(shù)字媒峡,分別命名為s1b瘟栖、s1s、s1g丝蹭、s2b慢宗、s2s、s2g奔穿,以變量名稱的最后一個字母镜沽,表示每個加數(shù)的百、十贱田、個位數(shù)字缅茉。第3個數(shù)(和),也是這樣命名的男摧。
先設(shè)置第1個加數(shù)蔬墩。從百位數(shù)字起,百位數(shù)字從1依次試到9耗拓。十位數(shù)字和個位數(shù)字都是依次從0到9拇颅,并且分別排除之前百位、百位和十位出現(xiàn)過的數(shù)字乔询。
第2個加數(shù)樟插,也是從百位起,從1依次試到9竿刁,并且排除第1個加數(shù)各個數(shù)位已出現(xiàn)的數(shù)字黄锤。十位數(shù)字和個位數(shù)字與第1個加數(shù)的十、個位數(shù)字類似食拜,從0循環(huán)試到9鸵熟,并排除上一層循環(huán)出現(xiàn)的數(shù)字。
第3個數(shù)字為第1负甸、第2個加數(shù)的和流强。將這個數(shù)各個數(shù)位上的數(shù)字,分別與第1呻待、第2個加數(shù)出現(xiàn)過的數(shù)字比煮盼,排除重復(fù)出現(xiàn)的情況。
答案
再篩去第1個加數(shù)與第2個加數(shù)互換的情況带污,這樣僵控,共找到48種不同的填法:
思考
觀察算式,和分別為1026,1035,1053,1062,1089,1098,1206,1305,1503,1602鱼冀。
學(xué)生拿到這個題目报破,該怎樣思考呢悠就?