poj2081

Description

The Recaman's sequence is defined by a0 = 0 ; for m > 0, am = am−1 − m if the rsulting am is positive and not already in the sequence, otherwise am = am−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 ak.

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 ak to the output.

Sample Input

7
10000
-1

Sample Output

20
18658

 

 

#include <stdio.h>
#include <string.h>
long long a[500001];int flog[5000000];//大的数组要放外面
void main()
{
 int  i,n;
 a[0]=0;
 memset(flog,0,sizeof(flog));
    for(i=1;i<=500000;i++)
    {
        if(a[i-1]-i>0&&flog[a[i-1]-i]==0) a[i]=a[i-1]-i;
        else a[i]=a[i-1]+i;
        flog[a[i]]=1;
    }
    while(scanf("%d",&n),n!=-1)
    printf("%ld\n",a[n]);
}

posted @ 2013-08-09 11:32  《 》  阅读(194)  评论(0编辑  收藏  举报