注册 登录
编程论坛 C++教室

约瑟夫问题求巧妙解答

li_danwang 发布于 2010-12-03 21:39, 541 次点击
n个人围成一圈,从第S个人开始报数1,2,…,m,数到m的人出圈,然后从出圈的下一个人开始重复此过程,直到全部人出圈。要求在给出m,n,s后,能输出出圈序列。求大哥大姐们提示点思路指点下
2 回复
#2
无名可用2010-12-03 22:03
假设报到3的人出列
void Select(int a[],int len,int s)
{
    int i=s;//记录开始报数的位置,注意s要小于len
    int j=0;//记录报数
    int count=0;//表示在开始前有0个人出列
    while(count<len-1)
    {
        j++;
        if(j==3 && a[i]!=0)//报到3,且该人还未出列
        {
            a[i]=0;//出列
            j=0;
        }
        i++;
        //下面两条语句是使其报数循环起来
        if(i==len)
            i=0;
    }
}
这是一个简单点的解法,当然还可以用队列实现,思路都一样
#3
南国利剑2010-12-03 23:33
用队列写比较直观。
1