首页 > 其他 > 详细

POJ2081:Recaman's Sequence

时间:2014-03-03 03:27:15      阅读:507      评论:0      收藏:0      [点我收藏+]

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
 
题目意思不难理解就是第m个位置的数是根据第m-1位置的数推出来的如果a[m-1]-m>0,并且a[m-1]-m在前面的序列中没有出现过那么a[m] = a[m-1]-m否则a[m] = a[m-1]+m
 
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

int a[500005]={0};
bool hash[10000000]={false};

int main()
{
    int i;
    for(i = 1;i<= 500000;i++)
    {
        if(a[i-1]-i>0 && !hash[a[i-1]-i])
        a[i] = a[i-1]-i;
        else
        a[i] = a[i-1]+i;
        hash[a[i]] = true;//hash[a[i]] = true,标志为已经出现过
    }
    while(~scanf("%d",&i),i>=0)
    printf("%d\n",a[i]);

    return 0;
}

POJ2081:Recaman's Sequence,布布扣,bubuko.com

POJ2081:Recaman's Sequence

原文:http://blog.csdn.net/libin56842/article/details/20237999

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!