这是一道要打表的递推题。注意数组开得足够大就行。
#include<cstdio> #include<cstring> #include<cstdlib> bool vis[4000000] = {false};//记录一个数是否出现在结果中 int a[500005]; void init() { a[0] = 0; for( int i = 1; i <= 500000; i ++) { if( a[i - 1] - i > 0 && !vis[ a[i - 1] - i]) a[i] = a[i - 1] - i; else a[i] = a[i - 1] + i; vis[ a[i] ] = true; } } int main() { int k; init(); while( scanf( "%d", &k), k != -1) { printf( "%d\n", a[k]); } return 0; }