例2_6.cpp

来自「《数据结构(C++描述)》-李根强-源代码」· C++ 代码 · 共 30 行

CPP
30
字号
//约瑟夫问题
#include<iostream.h>
const   int  n =10;
const   int  m=3;
const   int  s = 2;

void josephus(int a[n+1],int m,int s)
{  int i,j,k,w,s1;
for(i=1;i<=n;i++)
a[i]=i;             //存入n个人的编号
s1=s;
for(i=n;i>=2;i--)
{
  s1=(s1+m-1)%i;     //求得出圈人的位置
  if(s1==0)  s1=i;
  w=a[s1];           //w用于存放出圈人的位置
  for(j=s1;j<=i-1;j++)
  a[j]=a[j+1];         //一人出圈后,后面的元素前移
  a[i]=w;            //出圈人的位置存入后面
 }
 for(k=n;k>=1;k--)
 cout<<a[k]<<"  ";   //输出出圈的顺序
 cout<<endl;
}
void main()
{ int i,a[n+1];
for(i=1;i<=n;i++) a[i]=i;
cout<<"出圈的顺序"<<endl;
josephus(a,m,s);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?