找规律的题,按照排列的规律,我们可以推断出:

4=1+1

5=1+1+2

6=1+1+2+2

7=1+1+2+2+3

......


所以n=(x-1)/2是当前排列可以加的最大的值,比如:4/2==1,7/2==3......

而1+2+3+......+n又是一个等差数列,公式:sum = (1+n)*n/2

所以我们只要把sum*2就行,判断如果是奇数的话减去一个最大数就行。


题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=1214


代码

Memory: 1728 KB
Time: 0 MS
Language: C++
Result: Accepted
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int x, n, ans;
    while(~scanf("%d",&x) && x)
    {
        n=(x-1)/2;
        ans=(1+n)*n;
        if(x%2)ans-=n;
        printf("%d\n", ans);
    }
    return 0;
}