トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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を全て計算してます。