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