Description
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.
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.
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.
The last line contains an integer −1, which should not be processed.
Output
For each k given in the input, print one line containing a
k to the output.
Sample Input
710000-1
Sample Output
2018658
题目意思不难理解就是第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;}
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow