Sum
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 10285 | Accepted: 6751 |
Description
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.
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.
Source
[Submit] [Go Back] [Status] [Discuss]
此题没什么特别难懂的地方,关键就是理解题目:
基本思路:
因为输入得到的数值是由1~n中间的数相加或相减得到的,,所以,不妨先让所有的值都相加,然后改变其中的加号为减号,使得数值与输入的数值相同。
在对前几个数计算的是侯发现:
sum-k为偶数的时候,,当时的i的值即为所求值
因为sum为1~n的和,当sum大于k的时候,,就要考虑是否将其中的加号变为减号了,,因为加号变为减号相当于sum-2*(符号改变的i值),此时,如果sum-2×(符号改变的i1值的和)==k的话,那么此处的最后的i就是所求值,,由上面的等式可发现
SUM-K==2×(符号改变的i1值的和) 即sum-k为偶数的时候的i为所求值
由此可得如下代码:
# include<stdio.h>
int main(){
int i,n,sum;
while(~scanf("%d",&n)){
sum=0,i=1;
while(1){
sum+=i++;
if(sum>=n&&(sum-n)%2==0)
break;
}
printf("%d\n",i-1);
}
return 0;
}
解题人:李富昌
解题时间:201408251613
解题时间:201408251613