The ? 1 ? 2 ? ... ? n = k problem |
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
The first line is the number of test cases, followed by a blank line.
Each test case of the input contains integer k (0<=|k|<=1000000000).
Each test case will be separated by a single line.
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.
2 12 -3646397
7 2701
#include<stdio.h> #include<math.h> int main() { int i,k,n,m; scanf("%d",&n); while(n--) { scanf("%d",&k); if(m==0)printf("3\n"); else { k=k>0?k:-k; m=sqrt(2*k); for(i=m;i*(i+1)<2*k;i++); while(1) if((i*(i+1)/2-k)%2)i++;//实际上两次之内就可以改奇偶性了 else break; printf("%d\n",i); } if(n)printf("\n"); } return 0; }
原文地址:http://blog.csdn.net/acvcla/article/details/25345533