poj 1844

http://poj.org/problem?id=1844

首先 必须满足如果全是正数的话 sum 要大于s;如果sum<s 则继续加;
其次 res = sum-s (sum 为全为正的数的和) res 可分为奇数和偶数两种情况
    1、 res为奇数时 若改变一个数的符号 则 sum仍为奇数 eg:将+1 改为-1 则 sum -2 仍为奇数 即 res 为奇数时 改变一个数的符号 res 仍为奇数。然后继续加。。。
    2、 res 为偶数时,res的值必为 0,2,4,6,8。。。。。,这样可通过改变 0,1,2,3,4。。。。的符号来实现,eg: res 为2, 则可以改变 1的符号;若res为4 则可改变2的符号。只要res为偶数总可以通过改变一个数的符号来实现 ,第一个实现res为 偶数的 i即为所求。。。

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int s;
 8     while(cin>>s){
 9         int i  =1;
10         int sum = 0;
11         while(sum<s){
12             sum += i;
13             i++;
14         }
15         while((sum-s)%2==1){
16             sum += i;
17             i++;
18         }
19         cout<<i-1<<endl;
20     }
21     return 0;
22 }

 附加 disicuss 的链接 http://poj.org/showmessage?message_id=124254

原文地址:https://www.cnblogs.com/Bang-cansee/p/3190668.html