UVA10025 - The ? 1 ? 2 ? ... ? n = k problem
算法需要自己猜,参考了题解。
题目:
The ? 1 ? 2 ? ... ? n = k problem |
The 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 Input
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.
The 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
Alex Gevak
September 15, 2000 (Revised 4-10-00, Antonio Sanchez)
解答:
1 #include<stdio.h> 2 int main() 3 { 4 int i,j,t; 5 scanf("%d",&t); 6 while(t--) 7 { 8 int k; 9 scanf("%d",&k); 10 if(k<0) 11 k=-k; 12 for(i=1;;i++) 13 { 14 if((1+i)*i/2>=k) 15 { 16 int flag=1,res=(1+i)*i/2; 17 for(j=i;flag;) 18 { 19 if((res-k)%2==0) 20 flag=0; 21 else 22 { 23 j++; 24 res+=j; 25 } 26 } 27 if(flag==0) 28 break; 29 } 30 } 31 printf("%d\n",j); 32 if(t) 33 printf("\n"); 34 } 35 return 0; 36 }