C#でプロジェクトオイラーを解く(問題39「整数の直角三角形」)

プロジェクトオイラー
Pocket

どーも、みつおです。

問題

辺の長さが {a,b,c} と整数の3つ組である直角三角形を考え, その周囲の長さを p とする. p = 120のときには3つの解が存在する:

{20,48,52}, {24,45,51}, {30,40,50}

p ≤ 1000 のとき解の数が最大になる p はいくつか?

出典:Problem39

解答

using System;

namespace Problem39
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Solve());
            Console.ReadLine();
        }

        private static int Solve()
        {
            int ret = 0;
            int max = CountSankaku(120);

            for (int i = 2; i <= 1000; i++)
            {
                //解の数
                if (max < CountSankaku(i))
                {
                    //解の数を更新
                    max = CountSankaku(i);
                    ret = i;
                }
            }

            return ret;
        }

        private static int CountSankaku(int n)
        {
            int ret = 0;
            int c;

            for (int a = 1; a < n; a++)
            {
                for (int b = a; b < n - a; b++)
                {
                    c = n - a - b;

                    //三角形か判定
                    if (0 < c && c * c == a * a + b * b)
                    {
                        ret++;
                    }
                }
            }

            return ret;
        }
    }
}

 

出力

840

 

コメント

タイトルとURLをコピーしました