Given the following formula, one can set operators ‘+’ or ‘-’ instead of each ‘?’, in order to obtain a
given k
?1?2? . . .?n = k
For example: to obtain k = 12, the expression to be used will be:
- 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12
with n = 7
Input
The first line is the number of test cases, followed by a blank line.
Each test case of the input contains an integer k (0 ≤ |k| ≤ 1000000000).
Each test case will be separated by a single line.
Output
For each test case, your program should print the minimal possible n (1 ≤ n) to obtain k with the
above formula.
Print a blank line between the outputs for two consecutive test cases.
Sample Input
2
12
-3646397
Sample Output
7
given k
?1?2? . . .?n = k
For example: to obtain k = 12, the expression to be used will be:
- 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12
with n = 7
Input
The first line is the number of test cases, followed by a blank line.
Each test case of the input contains an integer k (0 ≤ |k| ≤ 1000000000).
Each test case will be separated by a single line.
Output
For each test case, your program should print the minimal possible n (1 ≤ n) to obtain k with the
above formula.
Print a blank line between the outputs for two consecutive test cases.
Sample Input
2
12
-3646397
Sample Output
7
2701
这个题思路是先求1+2+3+……+n>k的最小n,然后判断1+2+……+n的和减去k是否为偶数,若为偶数,则n即为所求,若不是,则n++重复刚才的判断。把k都当做正数做,它们只差了个符号,在本题没有影响
#include<stdio.h>
#include<stdlib.h>
int main()
{
int t;
scanf("%d",&t);
getchar();
while(t--)
{
int n,sum = 0;
scanf("%d",&n);
getchar();
n = abs(n);
int i;
for(i=1;;i++)
{
sum+=i;
if(sum>=n&&!((sum-n)%2))
break;
}
printf("%d\n",i);
if(t)
printf("\n");
}
}