Recaman's Sequence
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;
}