1.链接地址
https://vjudge.net/problem/POJ-2081
2.问题描述
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.
输入样例
7 10000 -1
输出样例
20 18658
3.解题思路
这一看就是打表题
4.算法实现源代码
#include<iostream> #include<cstring> #include<string> #include<algorithm> using namespace std; const int maxn=500000+10; int vis[5000005]; int a[maxn]; void init() { memset(vis,0,sizeof(vis)); memset(a,0,sizeof(a)); a[0]=0; vis[0]=1; int flag=0; for(int i=1;i<maxn;i++) { flag=a[i-1]-i; if(flag>0&&vis[flag]==0) { a[i]=flag; vis[flag]=1; } else { a[i]=a[i-1]+i; vis[a[i]]=1; } } } int main() { init(); int n; while(scanf("%d",&n)&&n!=-1) { printf("%d\n",a[n]); } }