業務のためのC#・C言語・C++学習

主にC#の文法やWPF周りのアウトプットに利用してます。

【C#】第一回アルゴリズム検定実技検定 過去問解答例

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}");
            }
        }
    }
}