题目链接:Click me!
Sum
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.Description
For a given S, find out the minimum value N in order to obtain S according to the conditions of the problem.
Input
The only line contains in the first line a positive integer S (0< S <= 100000) which represents the sum to be obtained.
Output
The output will contain the minimum number N for which the sum S can be obtained.
Sample Input
12
Sample Output
7
Hint
The sum 12 can be obtained from at least 7 terms in the following way: 12 = -1+2+3+4+5+6-7.
题意解析:
这道题呢,意思就是,给出一个S,你需要去寻找到一个最小的N,然后需要得出从1~N的和(可正可负)为S,输出这个N即可,比如12 = -1 + 2 + 3 + 4 + 5 + 6 - 7,那么结果就是7;
其实就两行代码,第一需要知道,最小的N,也就是在同样能得到S的情况下,符号绝大多数为正的话,才能尽可能得到最小的N,比如12 = -1 + 2 + 3 + 4 + 5 + 6 - 7,12 = -1 + 2 + 3 - 4 + 5 + 6 - 7 + 8,故我们先令1~N中全为正,然后求和,如果当前的前N项和大于S,且(SUM-S)% 2 = 0,那么久可以得到这个S,而且得到的N是最小的N。
代码篇:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{
int sum, i, j, k;
scanf("%d",&k);
sum = 0;
i = 1;
while(1)
{
sum += i++;
if(sum >= k && (sum - k) % 2 == 0)
{
printf("%d\n",i - 1);
return 0;
}
}
return 0;
}
OVER!