这题需要输出每次删除的点原来的编号,用一个数组记录当前编号的点最初的编号 对于每个要删除的next点,他后面的点的编号都减1,把他后面的数据整体向前移一位即可 代码: #include<iostream> #include<memory.h> #include<string> #include<cstdio> #include<algorithm> #include<math.h> #include<stack> #include<queue> using namespace std; char name[65][15]; int index[70]; int s,w,cnt,n; void go() { int i,now=w-1,next,b=0; while(true) { if(b==n) break; next=(now+s-1)%(n-b)+1; printf("%s/n",name[index[next]]); b++; for(i=next;i<=n;i++) index[i]=index[i+1]; now=next-1; } } int main() { int i,j; memset(name,0,sizeof(name)); cnt=0; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%s",name[i]); index[i]=i; } scanf("%d,%d",&w,&s); go(); return 0; }