Description
Input
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
原文:http://blog.csdn.net/libin56842/article/details/20237999