题意:第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>
#define N 500010
int ch[N];
int vis[N*10];
void init()
{
int i,j;
memset(vis,0,sizeof(vis));
memset(ch,0,sizeof(ch));
vis[0]=vis[1]=vis[3]=1;
ch[1]=1;
for(i=2;i<N;i++)
{
ch[i]=ch[i-1]-i;
if(ch[i]<1||vis[ch[i]]==1)
ch[i]=ch[i-1]+i;
vis[ch[i]]=1;
}
}
void main()
{
int k;
init();
while(scanf("%d",&k)!=EOF)
{
if(k==-1)
break;
printf("%d\n",ch[k]);
}
}