/////////////////////////////////////////////////////////////////////////////////////////////////////// //书上说用队列,就用队列,书上的代码,我真的一时半会儿,来不了,有点匪夷所思,不太符合,我的思考习惯 /////////////////////////////////////////////////////////////////////////////////////////////////////// #include <iostream> #include <cstdio> #include <queue> #include <cstring> #include <vector> using namespace std; queue<int> myQueue; vector<int> out;//输出 int main() { int n,p,m; scanf("%d %d %d",&n,&p,&m); int child[n+1];//标识,这个元素被没被删除 // memset(child, 1, n+1);//用不了,不会用 for(int i=1; i<n+1; ++i) { child[i]=0; } int k=0;//把n个元素都加入向量就停止循环 for(int i=p; k<n; ++i) { if(i>n) //n%n=0,这是不对的 { i=i%n; } if(myQueue.size()==m) { ++k; out.push_back(myQueue.back()); child[myQueue.back()]=1;//删除的标识一下 for(int j=0; j<m; ++j) { myQueue.pop();//满了就都弹出 } } if(child[i]==0) { myQueue.push(i); } } for(int w=0; w<out.size(); ++w) { printf("%d",out[w]); if(w!=out.size()-1) { printf(","); } } }