内容简介:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知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; 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 公链开发哪家最活跃?ETH登顶,核心开发人数为BTC两倍
- 【火炉炼AI】机器学习018-项目案例:根据大楼进出人数预测是否举办活动
- 原 荐 Java基于百度AI+JavaCV+OpenCV 实现摄像头人数动态统计
- .NET 5 框架 Furion 2.2.0 发布,祝贺 QQ 交流群人数破 6000 人大关
- 斯坦福全球AI报告:清华AI课程人数增16倍,人才需求暴增 35 倍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。