按照题目给出的递推公式生成序列就可以了,用数组来判重.
#include <cstdio>
using namespace std;
const int MAX = 500001;
bool vis[MAX * 7];
int seq[MAX];
void init(){
vis[0] = 1;
for(int i = 1; i < MAX; ++i){
int r = seq[i - 1] - i;
if(r > 0 && !vis[r]){
seq[i] = r;
vis[r] = 1;
}else{
r = seq[i - 1] + i;
seq[i] = r;
vis[r] = 1;
}
}
}
int main(int argc, char const *argv[]){
init();
int k;
while(scanf("%d", &k) && k != -1){
printf("%d\n", seq[k]);
}
return 0;
}