トップページに戻る    次の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以上だったら、
枝切りしてもいいかもしれません。