Recaman's Sequence |
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB |
Total submit users: 1252, Accepted users: 1085 |
Problem 10010 : No special judgement |
Problem 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 |
Problem Source |
Shanghai-P 2004 |
#include<stdio.h>
#define N 100000
int main()
{
static int a[500000],b[4000000];
int i=1,n;
a[0]=0;
for(i;i<=500000;i++)
{
a[i]=a[i-1]-i;
if(a[i]<=0 || b[a[i]]==1)
a[i]=a[i-1]+i;
b[a[i]]=1;
}
while(scanf("%d",&n),n>=0)
{
printf("%d\n",a[n]);
}
return 0;
}