约瑟夫问题,写的时候报错了,哪位大神讲解一下哈。
代码
//P84页约瑟夫问题。
#include <iostream>
using namespace std;
int main()
{
bool a[101]={0}; //n小于100 初始化第一个元素为0 之后是1......到100
//有101个数据元素
int n,m,i,f=0,t=0,s=0;
cin>>n>>m;
do
{
++t; //逐个枚举圈中的所有位置
if(t==n+1) t=1; //n个人数再加1 相当于100+1==所有位置 t=1代表首尾相连
if(a[t]==0) ++s; //第t个位置上有人开始了报数 也就是从1开始报数
if(s==m) //当前报的数是m 相当于从1开始报数 每次报数间隔是m
//假设m==3 那么每次报数间隔就是3
{
s=0; //计算器清0 第一轮报数完毕后 报的数清0 重新开始
cout<<t<<" "; // 输出报到的数;
a[t]=1; //出圈人数设置为空 下一次报数不算这个位置
++f; //f是 计数器 计算出圈的人数
}while(f!=n); //所有人出圈 程序结束。
}
return 0;
}