先试着将x从0一直增加,当增加到x>=n时,进行讨论
1,x=n,那么所得即所求
2,如果多出的部分为偶数,那么只需要把这个偶数的一半的那个奇数前的符号变换符号,转化为情况1
3,如果多于的部分为奇数,那就继续向后加,一直加到差值为偶数,转化为情况2
所以代码如下:
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
n=abs(n);
int ans=ceil((-1+sqrt(1+8.0*n))/2.0);
int d=ans*(ans+1)/2-n;
while(d&1)
{
++ans;d+=ans;
}
printf("%d\n",ans);
}
return 0;
}