题目

源地址:

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

理解

简单的计算题。利用打表的方法,空间换时间。

代码

#include <iostream>

using namespace std;

char ext[2600000] = {0};
int a[500001];

void reset()
{
    int i;
    a[0] = 0;
    ext[0] = 1;
    for (i = 1; i <= 500000; i++)
    {
        a[i] = a[i - 1] - i;
        if (a[i] < 0 || ext[a[i]])
        {
            a[i] = a[i - 1] + i;
        }
        ext[a[i]] = 1;
    }
}

int main(int argc, char const *argv[])
{
    int k;
    reset();
    while (cin >> k && k != -1)
    {
        cout << a[k] << endl;
    }
    return 0;
}

更新日志

  • 2014年07月17日 已AC。