题目链接:http://poj.org/problem?id=2081
分析:就是要求一系列数字,如果a[i-1]-i>0 则:ai=a[i-1]-i,否则的话 ai=a[i-1]+i,同时要满足这些数字在之前没有出现过。
源代码:
//POJ 2081 AC #include <iostream> using namespace std; int a[500010]; bool flag[3500000]={false};//如果也开个500010 运行时错误 void init(){ int i,t; a[0]=0; for(i=1;i<=500000;i++){ t=a[i-1]-i; if(t>0&&!flag[t]){ a[i]=t; } else{ a[i]=a[i-1]+i; } flag[a[i]]=true; } } int main(){ int k; init(); while(cin>>k){ if(k==-1) break; cout<<a[k]<<endl; } return 0; }