这个题思路是先求1+2+3+……+n>k的最小n,然后判断1+2+……+n的和减去k是否为偶数,若为偶数,则n即为所求,若不是,则n++重复刚才的判断。把k都当做正数做,它们只差了个符号,在本题没有影响。
程序代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int m, n, num;
cin>>m;
while(m--){
cin>>n;
if(n == 0){
cout<<3<<endl;
if(m) cout<<endl;
continue;
}
n = (int)fabs(n);
num = (int)sqrt(n);
while(1){
if(num * (num + 1) >= 2 * n ){
if(!(num & 1) && !((num / 2 * (num + 1) - n) & 1)){ //避免num * (num + 1)直接相乘益处
break;
}else if((num & 1) && !(((num + 1) / 2 * num - n) & 1))
break;
}
num++;
}
cout<<num<<endl;
if(m) cout<<endl;
}
return 0;
}