L1-6 大勾股定理(PTA)
大勾股定理是勾股定理的推广:对任何正整数 n 存在 2n+1 个连续正整数,满足前 n+1 个数的平方和等于后 n 个数的平方和。例如对于 n=1 有 32+42=52;n=2 有 102+112+122=132+142 等。给定 n,本题就请你找出对应的解。
输入格式:
输入在一行中给出正整数 n(≤104)。
输出格式:
分两行输出满足大勾股定理的解,格式如下:
a[0]^2 + a[1]^2 + ... + a[n]^2 =
a[n+1]^2 + ... + a[2n]^2
其中解的数列 a[0] ... a[2n]
按递增序输出。注意行首尾不得有多余空格。
输入样例:
3
输出样例:
21^2 + 22^2 + 23^2 + 24^2 =
25^2 + 26^2 + 27^2
代码:
#include<iostream>
using namespace std;
int main()
{
long long n;
cin>>n;
for(long long x=1; ;x++) //1.通过暴力循环来获得每一个n对应的第一个平方数
{ //(long long x=1; ;x++)此时空格表示为true,存在空格则此时表示无限循环。
long long leftSum=0;
long long rightSum=0;
for(int i=0;i<=n;i++) //找出0到n的所有平方和
{
leftSum+=(x+i)*(x+i);
}
for(int i=n+1;i<=2*n;i++) //找出n+1到2*n的所有平方和
{
rightSum+=(x+i)*(x+i);
}
if(leftSum==rightSum) //2.当左边与右边平方和相等时,则证明已找到n对应的平方和。
{
for(int i=0;i<=n;i++)
{
if(i>0) //因为第一个加号在第一个平方数的后面,所以当i大于左边第一个平方数位置时,则输出"+"。
{
cout<<" "<<"+"<<" ";
}
cout<<x+i<<"^2";
}
cout<<" =\n"; //因为给出的输出案例是=号后跳转到下一行,所以要写\n表换行。
for(int i=n+1;i<=2*n;i++)
{
if(i>n+1) //因为第一个加号在第一个平方数的后面,所以当i大于右边第一个平方数位置时,则输出"+"。
{
cout<<" "<<"+"<<" ";
}
cout<<x+i<<"^2";
}
break; //3.输出完成,break直接结束程序。
}
}
return 0;
}