1. #include<iostream.h>  
  2. #include <malloc.h>  
  3. #define n 10  
  4. typedef struct 
  5. {  
  6.     int data[10];  
  7.     int length;  
  8. }sqcircl;  
  9.  
  10. void initcircl(sqcircl *&c)//初始化约瑟夫环  
  11. {  
  12.     c=(sqcircl *)malloc(sizeof(sqcircl));  
  13.     c->length=0;  
  14. }  
  15.  
  16. void encircl(sqcircl *&c,int a[])//创建约瑟夫环  
  17. {  
  18.     sqcircl *s=c;  
  19.     int i;  
  20.     for(i=0;i<10;i++)  
  21.     {  
  22.         s->data[i]=a[i];  
  23.         c->length++;  
  24.     }  
  25. }  
  26.  
  27. void decircl(sqcircl *&c,int m)//寻找报数为m的人并将其叫出列  
  28. {  
  29.     sqcircl *s=c;  
  30.     int i,j,count=0;  
  31.     for(j=0;j<10;j++)  
  32.     {  
  33.         for(i=0;i<10;i++)  
  34.         {  
  35.             if(s->data[i]!=0)  
  36.                 count++;  
  37.             if(count==m)  
  38.             {  
  39.                 cout<<s->data[i]<<" ";  
  40.                 count=0;  
  41.                 s->data[i]=0;  
  42.                 s->length--;  
  43.             }  
  44.         }  
  45.         s=c;  
  46.     }  
  47.     cout<<endl;  
  48. }  
  49.  
  50. void main()  
  51. {  
  52.     sqcircl *c;  
  53.     int a[n]={1,2,3,4,5,6,7,8,9,10},m;  
  54.     initcircl(c);  
  55.     encircl(c,a);  
  56.     cout<<"请输入要出列的报数:";  
  57.     cin>>m;  
  58.     cout<<"依次出队的序列:"<<endl;  
  59.     decircl(c,m);  
  60. }