标题:约瑟夫环问题解答思路求助!!
只看楼主
mousiyue
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-3-3
结帖率:100%
已结贴  问题点数:20 回复次数:4 
约瑟夫环问题解答思路求助!!
题目:有17个人围成一圈,编号为0—16,从第0号的人开始从1报数,凡报到3的倍数离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号。
找到了两种解答方式,第一种比较容易理解,第二种有没有大佬解答一下,非常感谢!!!
第一种:
程序代码:
#include<stdio.h>
main() {
    int a[17] = { 0 };//代表17个人,值为0代表还在,1代表离开
    int baoshu = 1;//当前报数的数字,最多49
    int total = 17;//当前还剩多少人在
    int cur = 0;//17个人的当前人循环到的编号
    int i;
    while (total!=1) {
        if (cur == 17) //说明已经走到下一圈了,需要保证当前人的编号
            cur = 0;
        if (a[cur] == 1) { //说明该人已经离开圈子,报数不增加,走向下一人判断
            cur++;
            continue;
        }
        if (baoshu % 3 == 0) {
            a[cur] = 1;
            total -= 1;
        }
        baoshu++;
        cur++;
    }
    for (i = 0; i < 17; i++) 
        if(a[i]==0)
            printf("%d",i);
}

第二种:
程序代码:
#include<stdio.h>
main() {
    int i,test,p[17],head;
    for(i=0; i<16; i++)
        p[i]=i+1;
    p[16]=0;
    test=0;
    while(test!=p[test]) {
        for(i=1; i<3; i++) {
            head=test;
            test=p[test];
        }
        p[head]=p[test];
        test=p[head];
    }
    printf("%d",test);
}
搜索更多相关主题的帖子: test head int 当前 约瑟夫环 
2022-03-03 16:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
程序代码:
#include <stdio.h>

size_t josephus( size_t n, size_t m )
{
    size_t index = 0;
    for( size_t i=0; i!=n; ++i )
        index = (index+m)%(i+1);
    return index;
}

int main( void )
{
    printf( "%zu\n", josephus(17,3) ); // 输出10
}
2022-03-03 17:03
mousiyue
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-3-3
得分:0 
回复 2楼 rjsp
用函数有点超纲了,大佬,能不能解答一下我贴出的第二种方法是啥意思
2022-03-03 17:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
第二种方式其实就是个“链表”,每个元素存储的是下一个元素的索引。
2022-03-04 01:01
mousiyue
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-3-3
得分:0 
回复 4楼 rjsp
明白了,感谢大佬!!!
2022-03-04 17:16



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




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

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