📄 例2_6.cpp
字号:
//约瑟夫问题
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -