首页 留言 登录
5.4约瑟夫问题

N个人围成一圈,

从第一个人开始报数,数到M的人开始出圈。

再由下一个人重新报数,数到M的人出圈。

输出依次出圈的人的原始编号。

N和M由键盘输入。

#include <iostream> 
using namespace std;
bool a[110];

int main(){
    int n,m;
    cin >>n >>m;//全部n个人,报到m出圈
    cout << endl;
    for(int i=1;i<=100;++i)  a[i]=false;//全部赋值false,代表在圈内
    int f=0;//出圈人数
    int t=0;//圈内每个元素的下标 
    int s=0;//报数 
    do{
        ++t;
        if(t==n+1)t=1;//当t超过n时,t回到1,数组模拟成环状
        if(a[t]==false) ++s;//模拟报数
        if(s==m) { //当第m个人报数 
            s=0;
            cout << t << " " ;//输出出圈的人的编号
            a[t]  = true;//给他出圈的标志,true
            ++f;//出圈的人数增加 
        }              
    }while(f!=n);     
}
上一篇:猴子选大王
下一篇:5.3宾馆里有100个房间
验证码
评论留言 (0条)