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