哈喽大家好!我是@学霸小羊,上次讲了讲约瑟夫问题的背景,今天来讲讲怎样用代码实现。
(还没了解背景小伙伴的可以先去下面的网址学习一下)
首先,我们要将这个问题写清楚一些:
约瑟夫问题是个有名的问题:N 个人围成一圈,从第一个开始报数,第 M 个将被杀掉,最后剩下一个,其余人都将被杀掉。例如 N=6,M=5,被杀掉的顺序是:5,4,6,2,3。请按顺序输出被杀掉的顺序(包括幸存者)。
模版代码:
#include<bits/stdc++.h>
using namespace std;
main(){
bool a[101]={0};
int n,m,i,f=0,t=0,s=0;
cin>>n>>m;
do // do ... while 这种循环至少执行一次循环体,如果while后面的判断失败则退出循环
{
t++;//逐个枚举圈中的所有位置
if(t>n)
{
t=1;//数组模拟环状,最后一个与第一个相连
}
if(!a[t])
{
s++;//第t个位置上有人则报数
}
if(s==m)//当前报的数是m
{
s=0;//计数器清零
cout<<t<<' ';//输出被杀人编号
a[t]=1;//此处人已死,设置为空
f++;//死亡人数+1
}
}while(f!=n);//直到所有人都被杀死为止
return 0;
}
这是一种模拟的方法,通过代码模拟出杀人的顺序。
运行结果:
当然,这种方法只针对模拟。
好啦,今天就讲到这里,拜拜!
标签:do,顺序,++,代码,杀掉,c++,约瑟夫 From: https://blog.csdn.net/yangyanbin_sam/article/details/143153056