标题:约瑟夫环变形问题
只看楼主
粉jj
Rank: 2
等 级:论坛游民
威 望:1
帖 子:123
专家分:82
注 册:2011-3-8
结帖率:85.11%
已结贴  问题点数:50 回复次数:5 
约瑟夫环变形问题
Joseph
题目描述:
原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。
现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。
输入:
仅有的一个数字是k(0 < k <14)。
输出:
使得最先出列的k个人都是坏人的m的最小值。
输入样例:
4
输出样例:
30
程序:
#include <stdio.h>
long k, m, begin;
int check(long remain){
    long result = (  ) % remain;
    if (  ②  ){
        begin = result; return 1;
    }
    else return 0;
}
int main(){
    long i, find = 0;
    scanf("%ld", &k);
    m = k;
    while(  ③  ) {
        find = 1; begin = 0;
        for (i = 0; i < k; i++)
            if (!check(  ④  )){
                find = 0; break;
            }
        m++;
    }
    printf("%ld\n",   ⑤  );
    return 0;
}
搜索更多相关主题的帖子: find long 约瑟夫环 编号 出列 
2020-06-15 20:15
粉jj
Rank: 2
等 级:论坛游民
威 望:1
帖 子:123
专家分:82
注 册:2011-3-8
得分:0 
第二空:result>=k
第三空:find==0
第四空:2*k-i
第五空:m-1
第一空:想不明白呀想不明白
2020-06-15 20:25
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
得分:25 
begin+m-1

梦想拥有一台龙芯3A-4000
2020-06-15 21:54
粉jj
Rank: 2
等 级:论坛游民
威 望:1
帖 子:123
专家分:82
注 册:2011-3-8
得分:0 
回复 3楼 ditg
为什么啊??不理解~~~
2020-06-16 16:11
粉jj
Rank: 2
等 级:论坛游民
威 望:1
帖 子:123
专家分:82
注 册:2011-3-8
得分:0 
以下是引用ditg在2020-6-15 21:54:37的发言:

begin+m-1

为什么要用(begin+m-1)%remain,还赋给result?求教
2020-06-16 16:12
JabinZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:34
专家分:180
注 册:2020-5-7
得分:25 
回复 5楼 粉jj
这是一个推导公式 f(0)=0 f(i)=(f(i-1)+m-1)%(n-(i-1))  i>0
下标从0开始,
当前要去掉的下标=(上一次去掉的下标+要数的个数-1)%当前剩余人数
2020-06-16 23:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502137-1-1.html




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

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