C#により記述された第一回アルゴリズム検定実技検定の分析と解答例
A 2倍チェック
問題
文字列⇔数値の変換をする問題である。
https://atcoder.jp/contests/past201912-open/tasks/past201912_a
解法
2つの解法がある。
・変換に失敗した場合にエラーを返すParseメソッド
・変換に失敗した場合にfalse値を返すTryParseメソッド
変換に失敗した場合にエラーを返すParseメソッド
namespace A_IsItNumber { class Program { static void Main(string[] args) { Console.WriteLine("Type 3 characters"); string input = Console.ReadLine(); try { var a= int.Parse(input); Console.WriteLine(a * 2); } catch { Console.WriteLine("error"); } } } }
変換に失敗した場合にfalse値を返すTryParseメソッド
namespace A_IsItNumber { class Program { static void Main(string[] args) { Console.WriteLine("Type 3 characters"); string input = Console.ReadLine(); int tryparsedInt; if (int.TryParse(input, out tryparsedInt)) { Console.WriteLine(tryparsedInt * 2); } else { Console.WriteLine("error"); } } } }
B 増減管理
問題
整数値の差分をとる問題である。
https://atcoder.jp/contests/past201912-open/tasks/past201912_b
解法
・数値の比較後、比較した結果を配列に格納し出力
int N = int.Parse(Console.ReadLine()); string[] output = new string[N - 1]; int An0 = int.Parse(Console.ReadLine()); for (int i = 0; i < N - 1; i++) { int An1 = int.Parse(Console.ReadLine()); if (An1 == An0) { output[i] = "stay"; } else if (An1 > An0) { output[i] = $"up {An1 - An0}"; } else { output[i] = $"down {An0 - An1}"; } An0 = An1; } //出力 for (int i = 0; i < N - 1; i++) { Console.WriteLine(output[i]); }
C 3番目
問題
異なる整数を順番に並べ3番目に大きい値を表示する
https://atcoder.jp/contests/past201912-open/tasks/past201912_c?lang=ja
解法
var inputs = Console.ReadLine().Split(); for (int i = 0; i < inputs.Length; i++) { for (int j = i + 1; j < inputs.Length; j++) { if (int.Parse(inputs[i]) > int.Parse(inputs[j])) { var temp = inputs[j]; inputs[j] = inputs[i]; inputs[i] = temp; } } } Console.WriteLine(inputs[2]);
D 重複検査
問題
整数列の中に重複があるか検査せよ
https://atcoder.jp/contests/past201912-open/tasks/past201912_d
解法
・各整数列の値の個数を調べる。重複がなければ個数はそれぞれ1である
namespace D_Duplicated { class Program { static void Main(string[] args) { int N = int.Parse(Console.ReadLine()); var A_i = new int[N]; for (int i = 0; i < N; i++) { A_i[i] = (int.Parse(Console.ReadLine())); } //書き換えがなければある整数は1つしかないはずなので個数を数える var count = new int[N]; for (int i = 0; i < N; i++) { count[A_i[i] - 1]++; } //個数から重複を探す int duplicatedNum = 0; int missingNum = 0; for (int i = 0; i < N; i++) { if (count[i] == 0) { missingNum = i + 1; } else if (count[i] == 2) { duplicatedNum = i + 1; } } //出力 if (duplicatedNum == 0) { Console.WriteLine("Correct"); } else { Console.WriteLine($"Duplicated Number is {duplicatedNum}, Missing Number is {missingNum}"); } } } }