Problem 1304 Recaman’s Sequence.
题意
- a(0)=0
m>0,a(m)=a(m-1)-m,(a(m)是正数且不在序列中),否则a(m)=a(m-1)+m. - 输入:
k,0<=k<=500000
-1,结束输入 - 输出:
a(k)
思路
两个数组,a[]用来存放序列,flag[i]用来标记i是否在序列中,在时置1,不在置0
代码
#include<cstdio>
using namespace std;
int a[500010] = {0};
bool flag[10000000] = {false};
int main(){
int k, x;
flag[0] = true;
for(int i=1; i<=500000; i++){
x = a[i-1] - i;
if(x>0 && flag[x]==false)
a[i] = x;
else
a[i] = x + 2*i;
flag[a[i]] = true;
}
scanf("%d", &k);
while(k!=-1){
printf("%d\n", a[k]);
scanf("%d", &k);
}
return 0;
}