【C/C++】约瑟夫环问题

2024-08-28 17:28
文章标签 c++ 问题 约瑟夫

本文主要是介绍【C/C++】约瑟夫环问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 题目描述
      • 输入描述
      • 输出描述
    • 示例
    • 题解

题目描述

n个人(0,1,2,3,4…n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,…m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m,
请你求出大王的编号。

输入描述

输入一行包含三个整数n,k,m
1<=n<=100,1<=k<=n-1,1<=m<=100

输出描述

输出一个整数

示例

输入
5 1 2

输出
3

题解

解法一:
用数组做标记,模拟

#include <stdio.h>
int main(){int n,k,m;scanf("%d %d %d",&n,&k,&m);int a[105] = {0},count = n;//0表示还未被淘汰,1表示已经被淘汰while(count != 1){for(int i=1;i<=m-1;i++){while(a[(k+1)%n]){  //判断后面的一个人是否已经淘汰k=(k+1)%n;}k=(k+1)%n;}a[k] = 1; //表示报到m的人淘汰 count--;  //相应的人数要减一 while(a[k]){k = (k+1)%n; //下次从出队的人之后开始重新报数,循环往复}}printf("%d",k);return 0;
}

解法二:

#include<bits/stdc++.h>
using namespace std;
int main()
{int n,k,m;cin>>n>>k>>m;int ans=0;for(int i=1;i<=n;i++){ans=(ans+m)%i;}cout<<(ans+k)%n;return 0;    
}

解法三:
利用c++的queue

#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
using namespace std;int main() {queue<int>q;int n, k, m; cin >> n >> k >> m;for (int i = k; i < n; i++){q.push(i);}for (int i = 0; i < k; i++){q.push(i);}int id = 0;while (q.size()!=1){int a = q.front();q.pop();id++;if (m == id)id = 0;else q.push(a);}cout<<q.front();return 0;
}

解法四:
queue的不同解法

#include<iostream>
#include<vector>
#include<queue>
using namespace std;int main() {int n,k,m;cin>>n>>k>>m;queue<int> q;for(int i=0;i<n;i++) q.push(i);for(int i=0;i<k;i++){q.push(q.front());q.pop();}int cnt =0;while(q.size()>1){cnt++;if(cnt==m){q.pop();cnt=0;}else{q.push(q.front());q.pop();}}cout<<q.front();return 0;
}

请添加图片描述

这篇关于【C/C++】约瑟夫环问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115407

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2