圆圈中最后剩下的数字

简介: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 这就是有名的约瑟夫(Josephuse)环问题。可以用环形链表模拟圆圈的经典解法。

题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

这就是有名的约瑟夫(Josephuse)环问题。可以用环形链表模拟圆圈的经典解法。

分析:用模板库中的std::list来模拟一个环形链表。由于std::list本身不是一个环形结构,因此每当迭代器扫描到链表末尾的时候,要记得把迭代器移到链表的头部,这样就相当于按照顺序在一个圆圈里遍历了。

这种思路的代码如下:

 

int LastRemaining(unsigned int n, unsigned int m)
{
    if(n < 1 || m < 1)
        return -1;
    
    unsigned int i = 0;
    
    list<int> numbers;
    for(i = 0; i < n; ++i)
        numbers.push_back(i);
    list<int>::iterator current = numbers.begin();
    while(numbers.size() > 1)
    {
        for(int i = 1; i < m; ++i)
        {
            current++;
            if(current == numbers.end())
                current = numbers.begin();
        }
        
        list<int>::iterator next = ++current;
        if(next == numbers.end())
            next = numbers.begin();
        
        --current;
        numbers.erase(current);
        current = next;
    }
    
    return *(current);
}

 

 

 

 

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

相关文章
|
JavaScript 前端开发 Dubbo
注册中心设计 Ap 与 CP 区别|学习笔记
快速学习注册中心设计 Ap 与 CP 区别
1173 0
注册中心设计 Ap 与 CP 区别|学习笔记
|
存储 JavaScript BI
GitHub:GitHub简介、使用方法、经验总结(图文教程)之详细攻略(持续更新!)
GitHub:GitHub简介、使用方法、经验总结(图文教程)之详细攻略(持续更新!)
|
12月前
|
人工智能 前端开发 API
OpenAI 12天发布会内容全纪录!一文快速回顾获知亮点信息,原文附发布会中文字幕视频
OpenAI 于12月5日宣布将举行为期12天的系列发布活动,期间每天发布一个产品或样品,包括备受期待的AI视频生成工具Sora和新的推理模型。本文将介绍这12天的发布会每日的发布内容和相关亮点信息。
809 82
|
12月前
|
算法 前端开发 API
开源轻量级IM框架MobileIMSDK的鸿蒙NEXT客户端库已发布
MobileIMSDK-鸿蒙端是一套基于鸿蒙Next(纯血鸿蒙)系统的IM即时通讯客户端库: 1)超轻量级(编译后库文件仅50KB)、无任何第3方库依赖(开箱即用); 2)纯ArkTS编写、无Native代码、高度提炼、简单易用; 3)基于鸿蒙Next标准WebSocket API,简洁优雅; 4)可运行于任何支持鸿蒙Next的平台; 5)能与 MobileIMSDK的各种客户端完美互通; 6)可应用于鸿蒙Next中的消息推送、客服聊天、企业OA、IM等场景。
374 45
|
IDE 编译器 开发工具
C/C++开发环境
C/C++开发环境
331 4
|
Prometheus 监控 Cloud Native
系统监控负载
【10月更文挑战第19天】
|
12月前
|
缓存 数据库 索引
所有的接口都需要幂等吗?
幂等性(Idempotency)源自数学,指多次执行某操作结果不变。在计算机科学中,它确保在网络通信、重试机制和并发操作下系统状态一致。常见应用如HTTP方法中的GET、PUT、DELETE及数据库操作中的SELECT、UPDATE、DELETE等。实现幂等性可通过唯一请求ID、数据库约束、状态检查等方法。并非所有业务都需要幂等处理,需根据业务逻辑、系统容错策略及性能复杂度权衡。
160 0
|
存储 数据安全/隐私保护 iOS开发
|
存储 监控 算法
云计算中的数据安全与隐私保护策略
随着技术的不断发展,云计算中的数据安全和隐私保护策略也在不断演进。一方面,更加强大的加密算法和技术将为数据加密提供更高的安全性。另一方面,隐私保护协议和机制也将不断完善,以满足用户对隐私保护的需求。同时,数据审计和监控技术也将更加智能化,能够更准确地检测异常行为。
1313 0
云计算中的数据安全与隐私保护策略
|
机器学习/深度学习 搜索推荐 算法
搜索场景下的智能推荐演变之路:从基础到个性化
本篇详细介绍了搜索场景下智能推荐技术的演变历程,从基础的协同过滤算法到个性化推荐的深度学习实现。通过代码示例,读者可以了解不同阶段推荐算法的原理和实际应用,以及如何评估推荐效果。文章旨在帮助读者深入理解智能推荐的发展趋势,为构建更智能、个性化的推荐系统提供有益的指导。
2656 0