1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1e5+5;
4 /*int ph,pt;//head tail;
5 int myq[20];//ph==pt队列为空;
6 //当进行了pop操作Ph会前移,造成空间浪费,可以采用循坏队列优化;
7
8 int myq_push(int x)
9 {
10 if(pt==15)pt=0;
11 if(pt!=ph)myq[pt++]=x;
12 else return 0;
13 return 1;
14 }
15 int myq_pop()
16 {
17 if(ph==15)ph=0;
18 if(ph!=pt)ph++;
19 else return 0;
20 return 1;
21 }
22 int main()
23 {
24 //for(int i=0;i<10;i++)myq_push(i);
25 return 0;
26 }*/
27 /*
28 int q1[1005],q2[1005],q1h=0,q2h=0;
29
30 int main()
31 {
32 int m,n,k;
33 cin>>m>>n;
34 cin>>k;
35 int t1=m,t2=n;
36 for(int i=0;i<m;i++)q1[i]=i;
37 for(int i=0;i<n;i++)q2[i]=i;
38 while(k)
39 {
40 printf("%d %d\n",q1[q1h],q2[q2h]);
41 q1[t1++]=q1[q1h++];
42 q2[t2++]=q2[q2h++];
43 k--;
44 }
45
46 return 0;
47 }
48 */
49 //约瑟夫环
50 const int n=10,m=4;
51 int a[n+1],j=n,k=1,p=0;
52 int main()
53 {
54 for(int i=1;i<n;i++)a[i]=i+1;//从1开始计数
55 a[n]=1;
56 while(p<n)//要有n个人出队
57 {
58 while(k<m)
59 {
60 j=a[j];//pre指针
61 k++;
62 }
63 //此时k=m指向第m个节点,j指向第m个节点的前节点
64 //a[i]表示i的next节点;
65 printf("%d ",a[j]);
66 a[j]=a[a[j]];
67 k=1;
68 p++;
69 }
70 return 0;
71 }