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 }