トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
Cマガ電脳クラブ(第003回) 九つの数が9に
問題
185 96
--- + -- = 9
37 24
上の左辺には1〜9の数字がすべて1字ずつ登場している。さて、これと同様に
??? ??
--- + -- = 9
?? ??
の式を、1〜9すべての数字を1回ずつ使って正しい式にしてください。
例を含めて解は何通りあるか、すべてみつけてください。
ソース
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var stk = new Stack<List<int>>();
for (int I = 1; I <= 9; I++) {
stk.Push(new List<int>() { I });
}
while (stk.Count > 0) {
List<int> Popped = stk.Pop();
if (Popped.Count == 9) {
if (IsOK(Popped)) PrintAnswer(Popped);
continue;
}
for (int I = 1; I <= 9; I++) {
if (Popped.Contains(I)) continue;
stk.Push(new List<int>(Popped) { I });
}
}
}
static bool IsOK(List<int> pIntList)
{
/* A/B + C/Dとおく*/
int wkA = pIntList[0] * 100 + pIntList[1] * 10 + pIntList[2];
int wkB = pIntList[3] * 10 + pIntList[4];
int wkC = pIntList[5] * 10 + pIntList[6];
int wkD = pIntList[7] * 10 + pIntList[8];
//通分して加算
int Bunbo = wkB * wkD;
int Bunshi = wkA * wkD + wkC * wkB;
return Bunshi == Bunbo * 9;
}
static int AnswerCnt = 0;
static void PrintAnswer(List<int> pIntList)
{
Console.Write("Answer{0,2}は、", ++AnswerCnt);
Console.WriteLine("{0}{1}{2}/{3}{4} + {5}{6}/{7}{8} = 9",
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
解説
2項の加算=9なので、左の項が9以上だったら、
枝切りしてもいいかもしれません。