P1996 约瑟夫问题

约瑟夫问题

题目描述

n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 11 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰n−1 名小朋友,而该题是全部出圈。

输入格式

输入两个整数 n,m。

输出格式

输出一行 n 个整数,按顺序输出每个出圈人的编号。

样例

样例输入

复制代码
10 3

样例输出 #1

复制代码
3 6 9 2 7 1 8 5 10 4

提示

1≤m,n≤100

代码实现

cpp 复制代码
//一维数组实现静态单向链表 
#include<iostream>
using namespace std;
int s[106];     //s[i]记录第i个值的下一个值
int n,m;
int main(){
	cin>>n>>m;
	for(int i=1;i<n;i++)s[i]=i+1;
    s[n]=1;     //形成一个环
	int a;      	//a记录当前值 
	int b=1; 		//b记录当前值的下一个值
	while(n--){
		for(int i=1;i<m;i++){
			a=b;           //a记录当前值 
			b=s[b];		   //b记录当前值的下一个值
		}
		cout<<b<<" ";      //输出当前值的下一个值 
		s[a]=s[b];		   //把当前值的下一个值等于下一个值的下一个值 
		b=s[a];            
	} 
	return 0;
} 
相关推荐
嵌入式@秋刀鱼3 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
嵌入式@秋刀鱼3 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
泽02023 小时前
C++之list的自我实现
开发语言·数据结构·c++·算法·list
物联网嵌入式小冉学长6 小时前
2.线性表的链式存储-链表
数据结构·链表
顾小玙6 小时前
前缀和:leetcode974--和可被K整除的子数组
数据结构·算法
W说编程7 小时前
算法导论第三章:数据结构艺术与高效实现
c语言·数据结构·算法
hn小菜鸡7 小时前
LeetCode 2917.找出数组中的K-or值
数据结构·算法·leetcode
yield-bytes9 小时前
Java并发进阶系列:深度讨论高并发跳表数据结构ConcurrentSkipListMap的源代码实现(上)
数据结构
好易学·数据结构9 小时前
可视化图解算法51:寻找第K大(数组中的第K个最大的元素)
数据结构·python·算法·leetcode·力扣·牛客网·堆栈
NULL指向我11 小时前
C语言数据结构笔记5:Keil 编译器优化行为_malloc指针内存分配问题
c语言·数据结构·笔记