poj sum

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.

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]

Home Page   Go Back  To top


此题没什么特别难懂的地方,关键就是理解题目:


基本思路:


 因为输入得到的数值是由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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值