Recaman Sequence:
Recaman 序列被定义如下:
(1)a[0]=0;
(2)如果a[m-1]-m>0并且这个值在序列中不存在,则a[m]=a[m-1]-m;
(3)否则a[m]=a[m-1]+m;
Recaman 序列的前几个数的数值是:0,1,3,6,2,7,13,20,12,21,11,22,10,23,9,,,,
给一个数k,你的任务是计算a[k].
input:
输入数据有多组,每组一个整数k(0<=k<=500000),直到输入-1文件结束。使用上述计算规则,计算a[k]并且输出结果。
output:
按照输出格式输出w(a,b,c)的结果。
sample input:
7
10000
-1
sample output:
20
18658
代码解决:
#include <iostream> #include <cstring> #define size 500000 int a[size+1]; bool inp[size*10]; using namespace std; int main() { a[0]=0; inp[0]=true; memset(inp,false,sizeof(inp)); int n; for(n=1;n<=size;n++) { if(a[n-1]-n>0&&inp[a[n-1]-n]==false) a[n]=a[n-1]-n; else a[n]=a[n-1]+n; inp[a[n]]=true; } while(cin>>n&&n!=-1) cout<<a[n]<<endl; return 0; }