| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 541 人关注过本帖
标题:约瑟夫问题求巧妙解答
只看楼主 加入收藏
li_danwang
Rank: 4
来 自:鄂州
等 级:业余侠客
帖 子:112
专家分:203
注 册:2010-11-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
约瑟夫问题求巧妙解答
n个人围成一圈,从第S个人开始报数1,2,…,m,数到m的人出圈,然后从出圈的下一个人开始重复此过程,直到全部人出圈。要求在给出m,n,s后,能输出出圈序列。求大哥大姐们提示点思路指点下
搜索更多相关主题的帖子: 约瑟夫 解答 
2010-12-03 21:39
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:10 
假设报到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;
    }
}
这是一个简单点的解法,当然还可以用队列实现,思路都一样
2010-12-03 22:03
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:10 
用队列写比较直观。

南国利剑
2010-12-03 23:33
快速回复:约瑟夫问题求巧妙解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011558 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved