约瑟夫环(约瑟夫问题)求最后出列的人数

栏目: 编程工具 · 发布时间: 7年前

内容简介:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。如5个人,从编号为1的人开始报数,数到3的人出列,最后出列的人的编号为4。编写一个函数,总人数为50,从编号为1的人开始报数,数到3的人出列,计算出最后出列的人的编号。

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。如5个人,从编号为1的人开始报数,数到3的人出列,最后出列的人的编号为4。

编写一个函数,总人数为50,从编号为1的人开始报数,数到3的人出列,计算出最后出列的人的编号。

NSUInteger printLastDequeuedNumberInRoundTable(NSUInteger allMembersCount, NSUInteger dequeueNumber) {
    NSMutableDictionary<NSNumber *, NSString *> *dictM = @{}.mutableCopy;
    NSUInteger startIdx = 1;//first idx is 1 in round table issue
    //all members always dequeued finally
    while (dictM.allKeys.count != allMembersCount) {
        //members always sing from `1..dequeueNumber`
        for (NSUInteger i = 1; i <= dequeueNumber; i++) {
            //member at startIdx dequeued
            if (dictM[@(startIdx)]) {
                //ignore this, step next
                i--;
            } else {
                if (i == dequeueNumber) {
                    //record every `round table number` when last member who sing `dequeueNumber`
                    dictM[@(startIdx)] = @"dequeued";
                    if (dictM.allKeys.count == allMembersCount) {
                        NSUInteger lastNum = (startIdx - 1)%allMembersCount + 1;
                        NSLog(@"last member at number %ld dequeued", lastNum);
                        return lastNum;
                    } else {
                        NSLog(@"member at number %ld dequeued", (startIdx - 1)%allMembersCount + 1);
                    }
                }
            }
            ++startIdx;
            //the index in round table member varied from 1 to allMembersCount
            startIdx = (startIdx - 1)%allMembersCount + 1;
        }
    }
    return NSNotFound;
}
复制代码
NSUInteger lastNumber = printLastDequeuedNumberInRoundTable(50, 3);
lastNumber = 11;
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

结构化计算机组成

结构化计算机组成

Andrew S.Tanenbaum / 刘卫东 / 机械工业出版社 / 2001-10-1 / 46.00

AndrewcS.Tanenbaum获得过美国麻省理工学院的理学学士学位和加利福尼亚大学伯克利分校的哲学博士学位,目前是荷兰阿姆斯特丹Vrije大学计算机科学系的教授,并领导着一个计算机系统的研究小组.同时,他还是一所计算与图像处理学院的院长,这是由几所大学合作成立的研究生院.尽管社会工作很多,但他并没有中断学术研究. 多年来,他在编译技术.操作系统.网络及局域分布式系统方面进行了大量的一起来看看 《结构化计算机组成》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具