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