1. 程式人生 > >zcmu-1120: 前n項和(思維)

zcmu-1120: 前n項和(思維)

1120: 前n項和

Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 267  Solved: 122 [Submit][Status][Web Board]

Description

有一個序列,?1?2?3…?n=k,?的地方不是’+’就是’-’,你的任務是給定一個整數k,求出最小的n滿足上述條件。例如當k=12是,n為7。

- 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12

Input

多組測試資料。

每組測試資料包含1個整數k。(|k|<=10000)

Output

對於每組測試資料,輸出最小的n.

Sample Input

12

Sample Output

7

for example,1+2+3+4+5  = 15,如果要表示的k是< 15 的,那麼通過把前面的+改成-來實現,那麼可以發現,如果原來是+x,改成了-x,最後的結果比原來相差了兩倍的x,所以可以發現,如果全部加起來時得到的sum  > k了,就要判斷他們的差是否為偶數,是偶數則可以通過改變+為-來做到~

#include <cstdio>
#include <cmath>
#include<iostream>
using namespace std;
int main()
{
    int k,sum;
    while (scanf("%d",&k) != EOF)
    {
        sum = 0;
        k = abs(k);
        int i = 0;
        while(1)
        {
            i++;
            sum += i;
            if(sum == k)
            {
                cout<<i<<endl;
                break;
            }
            else if(sum > k)
            {
                if((sum-k)%2 == 0)
                {
                    cout<<i<<endl;
                    break;
                }
            }
            
        }
        
    }
    return 0;
}