众所周知,const_bh是一位日常混迹于青铜六的玩家,而且还不氪金,每次打游戏都要被尊贵的V9新月会员haozx爆锤。这次他们一起打一个坦克对战游戏,const_bh还是很有志气的,决定要一雪前耻,投入2毛5,志在打败haozx。
const_bh决定买等级为x 到 x+n的所有坦克。而haozx老是和const_bh对战,早已经厌倦胜利,决定买等级为(x+n)+1到(x+n)+n的所有坦克,让const_bh一辆坦克,并且只想和const_bh打平手。
听到这个消息,const_bh还是很高兴的,终于不用输了,他想在省钱的前提下(越高级的坦克肯定越贵啦),从什么等级的坦克开始买才能和haozx打成平局(他可不敢耍花招,否则haozx发现要输了直接上个等级为∞的坦克自己就凉了)。坦克的战力是其等级的平方,而且最低等级为1。
比如n=1时,可求得x=3,则const_bh买等级为3和4坦克,haozx买等级为5的坦克,3*3+4*4=5*5,即为打平。
当然,如果无解,那就输出“noob const_bh”。
题目有多组输入.
每行输入一个n(1<= n<= 1000),描述同题目.
每个样例输出占一行
如果有解,输出2 * n + 1个数,即所有被购买的坦克等级编号,行末无空格。
如果无解,则输出"noob const_bh"。
1 2
3 4 5 10 11 12 13 14
这个解法可能是因为sum1.sum2的范围超出了导致不能ac,所以这不是本题的正确解法。测试数据22还可以,23再往后就不行了。可以考虑用大整数?
#include<stdio.h>
int main(void){
int x,i,n,j,m,k;
unsigned long long sum1,sum2;
scanf("%d",&n);
m=0;
for(i=1;i<=1000;i++){
sum1=0;
sum2=0;
x=i;
for(j=x;j<=x+n;j++){
sum1+=j*j;
}
for(k=x+n+1;k<=x+n+n;k++){
sum2+=k*k;
}
if(sum1==sum2){
m=1;
break;
}
}
if(m)
for(i=1;i<=2*n+1;i++){
if(i!=1)
printf(" ");
printf("%d",x++);
}
else
printf("noob const_bh");
return 0;
}