UVA 10025 (13.08.06)

1959 단어 uva
The ? 일?2 ? ... ? n = k problem 
 

Theproblem


Given the following formula, one can set operators '+' or '-' instead of each '?', in order to obtain a given k ? 일?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
 

TheInput


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

문제는 거추장스럽지 않아요~
방법:
가령sum1=a1+a2+a3+...+an + x >= k
반면sum2=a1+a2+a3+...+an - x = k
그러면 sum1. - sum2 = 2x.
즉, k의 양과 음을 막론하고 모두 k를 정수로 처리하고 정수를 누적하여sum1을 얻는 것과 전당정수로 처리하지 않는sum2의 차이는 짝수(2x, 즉 마이너스의 절대치의 2배~)
그러므로 모두 1에서 n으로 더하세요. (sum>=k&(sum-k)%2=0)
AC 코드:
 
#include<stdio.h>

int T;

int main() {
    scanf("%d", &T);
    while(T--) {
        int k;
        int sum = 0;
        scanf("%d", &k);
        if(k < 0)
            k = (-1 * k);
        for(int i = 1; ;i++) {
            sum += i;
            if(sum >= k && (sum-k) % 2 == 0) {
                printf("%d
", i); break; } } if(T) printf("
"); } return 0; }

 
 

좋은 웹페이지 즐겨찾기