どーも、みつおです。
問題
辺の長さが {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