トップページに戻る
次のPHPのサンプルへ
前のPHPのサンプルへ
Cマガ電脳クラブ(第003回) 九つの数が9に
問題
185 96
--- + -- = 9
37 24
上の左辺には1〜9の数字がすべて1字ずつ登場している。さて、これと同様に
??? ??
--- + -- = 9
?? ??
の式を、1〜9すべての数字を1回ずつ使って正しい式にしてください。
例を含めて解は何通りあるか、すべてみつけてください。
ソース
<?php error_reporting(E_ALL);
$Stk = new SplStack();
for ( $I = 1; $I <= 9; $I++) {
$Stk->push(array($I));
}
while($Stk->isEmpty() == false){
$Popped = $Stk->pop();
if(count($Popped) == 9){
if (IsOK($Popped)) PrintAnswer($Popped);
continue;
}
for ( $I = 1; $I <= 9; $I++) {
if(in_array($I,$Popped)) continue;
$Stk->push(array_merge($Popped,array($I)));
}
}
function IsOK($pIntList)
{
/* A/B + C/Dとおく*/
$wkA = $pIntList[0] * 100 + $pIntList[1] * 10 + $pIntList[2];
$wkB = $pIntList[3] * 10 + $pIntList[4];
$wkC = $pIntList[5] * 10 + $pIntList[6];
$wkD = $pIntList[7] * 10 + $pIntList[8];
//通分して加算
$Bunbo = $wkB * $wkD;
$Bunshi = $wkA * $wkD + $wkC * $wkB;
return $Bunshi == $Bunbo * 9;
}
function PrintAnswer($pIntList)
{
static $AnswerCnt = 0;
printf("Answer%2dは、", ++$AnswerCnt);
printf("%d%d%d/%d%d + %d%d/%d%d = 9\n",
$pIntList[0], $pIntList[1], $pIntList[2], $pIntList[3], $pIntList[4],
$pIntList[5], $pIntList[6], $pIntList[7], $pIntList[8]);
}
実行結果
Answer 1は、763/98 + 51/42 = 9
Answer 2は、735/98 + 24/16 = 9
Answer 3は、612/78 + 45/39 = 9
Answer 4は、465/93 + 72/18 = 9
Answer 5は、376/84 + 95/21 = 9
Answer 6は、345/69 + 72/18 = 9
Answer 7は、297/54 + 63/18 = 9
Answer 8は、264/57 + 83/19 = 9
Answer 9は、185/37 + 96/24 = 9
Answer10は、184/26 + 75/39 = 9
解説
深さ優先探索で1から9の順列を列挙してます。
C#で解いたもの