Sum

Sum

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 2
 
描述
Consider the natural numbers from 1 to N. By associating to each number a sign (+ or -) and calculating the value of this expression we obtain a sum S. The problem is to determine for a given sum S the minimum number N for which we can obtain S by associating signs for all numbers between 1 to N. 

For a given S, find out the minimum value N in order to obtain S according to the conditions of the problem. 
 
输入
The input consists N test cases.
The only line of every test cases contains a positive integer S (0< S <= 100000) which represents the sum to be obtained.
A zero terminate the input.
The number of test cases is less than 100000.
输出
The output will contain the minimum number N for which the sum S can be obtained.
样例输入
3

12

0
样例输出
2

7
来源
POJ
上传者
张云聪
 
 
明天就要考高数了、今晚写写水题练练、、、暑假要好好学习、、、大学的期末就是个坑O(∩_∩)O哈!
 
设 带正号的和为X,带负号部分和为Y
X+Y=(1+N)N/2;
X-Y=k;
所以,(1+N)N/2-k   一定是能被2整除才行,O(∩_∩)O~

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int main()
{
    int n,k,sum;
    while(scanf("%d",&k),k)
    {
        sum=n=1;
        while(sum<k)
          sum+=++n;
        while((sum-k)%2)
        {
             n++; 

             sum+=n;
        }

        printf("%d\n",n);

    }
    return 0;
}

你可能感兴趣的:(SUM)