Integer right triangles

Problem 39

If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120.

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

For which value of p ≤ 1000, is the number of solutions maximised?

Answer:

840

Completed on Sat, 29 Oct 2016, 17:04


题解:数学,a+b+c = p,a^2+b^2=c^2 ,化简:p^2 + 2ab = 2p(a+b) ....

代码:


#include<bits/stdc++.h>
using namespace std;
int solve(int n)
{
int ans = 0;
for (int a=1;a<n;a++)
{
for (int b=a;b<n;b++)
{
int c = n-a-b;
if (c>b)
{
// a+b+c = p, a2+b2=c2 化简:p2 + 2ab = 2p(a+b)
if (n*n+2*a*b == 2*n*(a+b))
{
ans++;
}
}
}
}
return ans;
}

int main()
{
int max_i=0,max_ans=0;
for (int i=1;i<=1000;i++)
{
int ans = solve(i);
if( ans > max_ans)
{
max_i = i;
max_ans= ans;
}
}
cout<<max_i<<" "<<max_ans<<endl;
return 0;
}