トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

ABC-012-C 九九足し算

■■■問題■■■

高橋君は、先日、九九の表を全て暗記することに成功しました。

九九で物足りなくなった高橋君は、1×1から9×9までの値を、全て足してみることにしました。
高橋君は、九九のうちの一つの答えを忘れてしまったので、
その計算を後回しにして、残りの和を求めたところ、Nになりました。

しかし、高橋君は、後回しにした問題がどれだか解らなくなってしまいました。
高橋君が後回しにしてしまった問題として、あり得るものを辞書順で全て出力しなさい。

■■■入力■■■

N

●1行目には、高橋君の演算結果を表す整数 N(1944 <= N <= 2024) が与えられる。
●答えが存在しないようなNは与えられない。

■■■出力■■■

高橋君が飛ばした演算を、1行ずつ辞書順で全て出力せよ。出力の末尾にも改行をいれること。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("2013");
            //2 x 6
            //3 x 4
            //4 x 3
            //6 x 2
            //高橋君の求めた値は、本来の値より12少ないものです。
            //よって、答えが12となる、
            //2 × 6、 3 × 4、 4 × 3、 6 × 2
            //の4つが答えとなります。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("2024");
            //1 x 1
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int N = int.Parse(InputList[0]);

        var KukuDict = new Dictionary<string, int>();
        for (int I = 1; I <= 9; I++) {
            for (int J = 1; J <= 9; J++) {
                KukuDict.Add(string.Format("{0} x {1}", I, J), I * J);
            }
        }

        int SumVal = KukuDict.Values.Sum();
        foreach (var EachPair in KukuDict.OrderBy(X => X.Key)) {
            if (N == SumVal - EachPair.Value) {
                Console.WriteLine(EachPair.Key);
            }
        }
    }
}


解説

9*9を全て計算してます。