Josephus问题

来源:互联网 发布:苏联解密档案数据库 编辑:程序博客网 时间:2024/06/05 07:35

num个小孩围绕坐在一起,分别标记为{1,2,3...,num},从某一个小孩开始计数,每隔interval个孩子便要离开一个,最后剩下的便是获胜者。

#include<iostream>using namespace std;int main(){    int num,interval,startNum;    cout<<"please input the num of children 、 the interval  and the start num"<<endl;    cin>>num>>interval>>startNum;    int* children=new int[num];    for(int i=0;i<num;i++)//为每个小孩进行标记        children[i]=i+1;    for(int i=0;i<num;i++)        cout<<children[i]<<',';    cout<<endl;    int index=startNum-2;//起始小孩的前一个小孩的数组下标,当第一个孩子是起始小孩时,index=-1    int round=1;//记录游戏的轮数    while(1)    {        for(int i=0;i<interval;)//数数环节        {            index=(index+1)%num;            if(children[index]!=0)//判断该孩子是否已经离开                i++;        }        if(round==num)//当轮数和小孩子的总数相同时,便只剩下一个小孩了            break;        cout<<children[index]<<',';//输出离开的小孩的标记        children[index]=0;//并且将该小孩的标记置0,表示已经离开        round++;//开始下一轮游戏    }    cout<<endl;    cout<<"NO "<<children[index]<<" child wins the game."<<endl;    delete[] children;    return 1;}
0 0
原创粉丝点击