基本思路:
这道题暴力拿到14分并不难,根据题意模拟即可,具体代码在下面。
至于最后一个测试点超时的问题,我暂时的想法是用两个数组记录前n+1和前n个数字的各平方之和,这样在循环查值的时候就可以省去了很多重复计算。因为还没有教育超市还没有开通重现,所以暂时验证不了我的想法啦~
参考代码(14分):
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll num[100005];
int main()
{
for(int i = 1; i <= 50000; i++)
num[i] = i*i;
int n;
cin >> n;
int res, i = 0;
int l, r;
while(1)
{
l = 0, r = 0;
for(int j = 1; j <= n+1; j++)
l += num[i+j-1];
for(int j = i+n+1; j <= i+n+n; j++)
r += num[j];
if(l == r)
{
res = i;
break;
}
i++;
}
for(int i = 1; i <= n+1; i++)
{
if(i > 1)
printf(" + ");
printf("%d^2", res+i-1);
}
printf(" =\n");
for(int i = 1; i <= n; i++)
{
if(i > 1)
printf(" + ");
printf("%d^2", res+n+i);
}
return 0;
}