首页 > 试题广场 >

约瑟夫环

[编程题]约瑟夫环
  • 热度指数:14135 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}n 个人(编号 0\sim n-1)围成一圈,从编号为 k 的人开始报数,报数依次为 1,2,\dots,m,报到 m 的人出队。下次从出队者的下一个人开始重新报数,循环往复,直到队伍中只剩最后一个人,该人即"大王"。

\hspace{15pt}给定三个正整数 n,k,m,请输出最后剩下的"大王"编号。

输入描述:
\hspace{15pt}在一行中输入三个整数 n\left(2 \leqq n \leqq 100 \right),k\left(0 \leqq k \leqq n-1\right),m\left(1 \leqq m \leqq 100\right),用空格隔开。


输出描述:
\hspace{15pt}输出一个整数,表示最后剩下的"大王"编号。
示例1

输入

5 1 2

输出

3

说明

初始队列编号为 [0,1,2,3,4],从编号 1 开始报数:

\hspace{8pt}1(1),2(2)\to 2 出队,剩余 [0,1,3,4]

\hspace{8pt}3(1),4(2)\to 4 出队,剩余 [0,1,3]

\hspace{8pt}0(1),1(2)\to 1 出队,剩余 [0,3]

\hspace{8pt}3(1),0(2)\to 0 出队,剩余 [3],输出 3
头像 Tender^
发表于 2021-10-03 14:19:00
#include<bits/stdc++.h> using namespace std; int main(){ int n,k,m; cin>>n>>k>>m; int a[105]={0}; //数组元素为0表示未被淘 展开全文
头像 白白白e
发表于 2024-04-05 23:24:11
n个人围个圈,k是个起始位置,点到m个,那人出去 下一轮k是出去那人的后面一个。 也就是说让k一直循环就行了。 由于固定数组遍历会遍历到0这些不在队中的人,需跳过他们,从1这些在队中的人开始 #include<stdio.h> int main(){ int n,k,m; 展开全文
头像 pyds
发表于 2022-11-09 11:08:55
题目描述 n个人(0,1,2,3,4...n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,...m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m,请你求出大王的编号。 输入描述: 输入一行包 展开全文
头像 CodingCaius
发表于 2022-11-23 08:45:31
">#include<algorithm> using namespace std; int n,k,m; int main() { cin>>n>>k>>m; int ops=0; for(int i=2;i<=n 展开全文
头像 小卢code
发表于 2022-01-22 12:33:03
#include<bits/stdc++.h> using namespace std; int main() { int n,k,m; cin>>n>>k>>m; int a[105] = {0},count = n; 展开全文
头像 Hanson_Zhong
发表于 2022-04-16 14:23:14
https://ac.nowcoder.com/acm/contest/19306/1003 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 n个人(0,1,2,3,4...n-1 展开全文
头像 GB279824
发表于 2025-06-07 20:59:53
n,k,m = map(int,input().strip().split()) l = list(range(n)) while n>1: k = (k+m-1)%n l.pop(k) n -= 1 print(l[0])
头像 爱吃香菜的你选钝角
发表于 2025-01-04 21:59:27
#include<stdio.h> int josephus(int n,int k,int m){//n个人,编号为k     int result=0;//初始时,只有一个人结果是0 &nbs 展开全文
头像 牛客458374228号
发表于 2020-12-08 22:53:45
题目描述n个人(0,1,2,3,4...n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,...m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m,请你求出大王的编号。 输入描述:输入一行包含三个整 展开全文
头像 Silencer76
发表于 2025-06-10 11:12:37
题目链接 约瑟夫环 题目描述 有 n 个人(编号 0 到 n-1)围成一圈,从编号为 s 的人开始报数,报数依次为 1, 2, ..., m。报到 m 的人出队。下一次从出队者的下一个人开始重新报数,循环往复,直到队伍中只剩最后一个人,该人即为"大王"。给定三个整数 n, s, 展开全文