1. 程式人生 > >CDUTCM OJ 1004: 前n項和

CDUTCM OJ 1004: 前n項和

題目描述

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

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

輸入

多組測試資料。

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

輸出

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

樣例輸入

12

樣例輸出

7

思路:簡單判斷,如果是全為加號的情況十分的容易判斷,即從1~n之和剛好等於這個數便是最小值,但如果有減號的就得好好思考:首先,如果從1開始累加的和大於K  比如1+2+3+4+5=15,已經大於K值12,如果我們從中變一個+號為-號,比如再2之前的加號變為減號,那麼整個等式的值就會減少2*2=4的值(1-2+3+4+5=11),可以得出無論變化多少個+號,其等式的值均會減少變化+號右邊值的兩倍,所以將1開始累加,遇到大於K值時判斷能否被2整除,就是n的最小值。

AC程式碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#include<stdio.h>

int main()

{

int a,i,k,y;

while(~scanf("%d",&a))

{

a=abs(a);

k=0;

for(i=1,y=0;y!=1;i++)

{

k=k+i;

if(k==a)

{

printf("%d\n",i);

break;

}

if(k>a)

{

if((k-a)%2==0)

{

printf("%d\n",i);

break;

}

}

}

}

return 0;

}

/**************************************************************

Problem: 1004

User: 201644901023

Language: C

Result: 正確

Time:0 ms

Memory:1116 kb

****************************************************************/