poj2081

Recaman's Sequence

Time Limit: 3000MS Memory Limit: 60000K
Total Submissions: 15860 Accepted: 6666

Description

The Recaman's sequence is defined by a0 = 0 ; for m > 0, a m = a m−1 − m if the rsulting a m is positive and not already in the sequence, otherwise a m = a m−1 + m. 
The first few numbers in the Recaman's Sequence is 0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9 ... 
Given k, your task is to calculate a k.

Input

The input consists of several test cases. Each line of the input contains an integer k where 0 <= k <= 500000. 
The last line contains an integer −1, which should not be processed.

Output

For each k given in the input, print one line containing a k to the output.

Sample Input

7
10000
-1

Sample Output

20
18658

Source


 
水过
#include <iostream>
#include <cstring>

using namespace std;

bool record[40000000];

int main()
{
    int k;
    int am;

    while(cin>>k && k!=-1)
    {
        memset(record,0,sizeof(record));
        am=0;
        record[am]=true;
        for(int i=1; i<=k; i++)
        {
            if(am-i>0 && !record[am-i])
                am=am-i;
            else
                am=am+i;
            record[am]=true;
        }
        cout<<am<<endl;
    }

    return 0;
}

你可能感兴趣的:(poj)