给定k,问由特定的式子得到k的最小值的n,因为式子 ? 1 ? 2 ? ... ? n = k 中问号可以变成加号,或者减号,如果全部为加号那么此时需要的n是最小的,但是要是中途有一个加号变成了减号,结果都是减少了2的偶数倍,所以只要找出 1+2+3+..+n>=k的n,然后判断n-k是否是偶数,不是n继续增大,直到找到为止。
#include<cstdio>
int main()
{
int t,n,i,j,s=0;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n<0) n=-n;
s=0;
for(i=1;;i++)
{
s+=i;
if(s>=n&&(s-n)%2==0)
{
j=i; break;
}
}
printf("%d\n",j);
if(t) printf("\n");
}
return 0;
}