美文网首页
约瑟夫环(c++)

约瑟夫环(c++)

作者: w_dll | 来源:发表于2019-08-28 15:19 被阅读0次
#include<iostream> 
using namespace std;
void joseph(int sum,int m){
    int people[sum],temp[sum],index;
    for(int i=0;i<sum;i++){
        people[i]=i+1;
    }
    while(1){
        int remain_people=0;
        for(int i=0;i<sum;i++){
            if(people[i]!=0){
                index=people[i];
                temp[remain_people++]=people[i]-1;
            }
        }
        cout<<"remain people:"<<remain_people<<endl;
        if(remain_people==1){
            cout<<index<<endl;
            break;
        }   

        if(remain_people>=m){
            int out_people=temp[m-1];
            cout<<"out people:"<<people[out_people]<<endl;
            people[out_people]=0;
        }
        else if((m%remain_people)==0){
            int out_people=temp[remain_people-1];
            cout<<"out people:"<<people[out_people]<<endl;
            people[out_people]=0;           
        } 
        else{
            int out_people=temp[(m%remain_people)-1];
            cout<<"out people:"<<people[out_people]<<endl;
            people[out_people]=0;
        }
    }
} 
int main(){
    while(1){
        int sum,m;
        cout<<"input total number of people:"<<endl;
        cin>>sum;
        cout<<"input a number:"<<endl;
        cin>>m;
        joseph(sum,m);
        char op;
        cout<<"enter y to continue"<<endl;
        cin>>op;
        if(op!='y') break;
    }
}

上面有点问题,用递归变得简单

#include<iostream> 
using namespace std;
int joseph(int n,int m){
    return n == 1 ? n : (joseph(n - 1, m) + m - 1) % n + 1;
} 
int main(){
    while(1){
        int sum,m;
        cout<<"input total number of people:"<<endl;
        cin>>sum;
        cout<<"input a number:"<<endl;
        cin>>m;
        int out_people=joseph(sum,m);
        cout<<"out people:"<<out_people<<endl;
        char op;
        cout<<"enter y to continue"<<endl;
        cin>>op;
        if(op!='y') break;
    }
}

相关文章

  • 约瑟夫环(c++)

    上面有点问题,用递归变得简单

  • 约瑟夫环问题(c++)

    百度百科: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆...

  • 约瑟夫环问题

    约瑟夫环问题约瑟夫环描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围...

  • 循环单链表实现约瑟夫环(C语言)

    约瑟夫环

  • 约瑟夫环

    题目:100名学生围成一个圈, 编号从1到100,从第一名学生开始报数,从1-9报数 每报出9就退出,直到所有学生...

  • 约瑟夫环

  • 约瑟夫环

    问题:1~n个人围成一圈,从1开始报数,每次数到m这个人就出列,问最后剩下的是几号? 做法:递归。 假设剩下的是f...

  • 约瑟夫环

    解法一 用一个list模拟删除过程 解法二 数学公式,推到过程还没看懂

  • 约瑟夫环

    之前去面试的时候遇到这个问题,作为一只算法渣渣,自然带着恐惧的心情,然后自己瞎捣鼓了好长时间终于拼凑出来了一个很菜...

  • 约瑟夫环

网友评论

      本文标题:约瑟夫环(c++)

      本文链接:https://www.haomeiwen.com/subject/aztmectx.html