动态规划EZ---Recaman序列

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;
}



难点:判断 值在序列中不存在,运用一个bool型数组 下标对应数字完美解决此问题。

你可能感兴趣的:(C++)