约瑟夫环:循环链表,数组

2023-10-26


站成一圈,从1报数,报数为m则出列,求出列序列

1.循环链表

设计思路

用循环链表实现逻辑结构

Front
1
2
3
4
5

让从第一个开始遍历,
每来到一个人
报数count++
若报m即count%m=0,则删除这个人
来到下一个人

#include <iostream>
using namespace std;

struct Node{
	int data;
	Node* next;
}*Pointer;

int main(int argc, char** argv) {
int n=0,m=0;
cin>>n>>m;//n个人,报数m
//头节点 
Node* head=NULL;
head=new Node; 
	Node* p=head;
//链表赋值 
	for(int i=0;i<n;i++){		
		p->next=new Node;
		p=p->next;
		p->data=i+1;
	}
//头尾相连	
p->next=head->next;

	int countDeath=0;
int i=1;
Node* q=NULL;
//p指向报数者前一个节点 ,q指向出列者 
while(n-countDeath>0){
	if(i%m==0){
		cout<<p->next->data<<" ";
      q=p->next;
      p->next=q->next;
	delete q;
	countDeath++;
	}else{
	
	p=p->next;}
	i++;
}
	return 0;
}

2.顺序表(数组实现)

设计思路

用一个数组储存n个人
用模运算,将这个长度为n的数组想象成一个圆环。
1,2,3,4,···,n,1,2,3,···n,···

数组下标是 k k k,考虑成 (k%m),代表 k k k号人
其中储存1或0,1代表有人,0代表出列。

i用来记录报数。
每来到一个人a[k%m]==1
报数i++
如果 i = = m i==m i==m,出列,a[k%m]=0;

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	int n=0,m=0;
	cin>>n>>m;
	int* a=new int[n];
//一个一个站成一圈
	int i=1;
	for(i=0;i<n;i++){
		a[i]=i+1;
	}
	i=1;
	int k=0;
	int death=0;
	while(death<n){
		if(k==n)k=0;//索引模运算 
		
		if(k<n){
			      if(a[k]!=0){
				    if(i%m==0){
			            cout<<a[k]<<" ";
		                a[k]=0;
		                death++;
	                    }
	     	        i++;//报数 
	     	        k++;
		       }else{//走了的人不报数 
		        k++;
	        	}
		}
	}
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

约瑟夫环:循环链表,数组 的相关文章

  • mysql存储过程和存储函数

    一 存储过程概述 1 mysql存储过程和存储函数是将复杂sql集合在一起 应用程序只需调用即可 不必关注mysql存储过程和存储函数sql逻辑 存储过程预先经过编译的一组sql 存储在 MySQL 服务器上 需要执行的时候 客户端只需要向
  • go 递归tree关系_统一的树可视化形式描述语法 – GoTree

    树可视化是可视化领域长期以来的研究热点 近40年来 研究者利用不同的视觉映射方式发展了超过300种树可视化形式 https treevis net 并且广泛应用在日常生活中 例如展示电脑文件目录结构的缩进列表 反映股市中公司市值以及股价升降
  • 【Linux】网络基础(二)

    TCP UDP协议 UDP 协议通信程序的编写 套接字相关接口介绍 字节序相关接口 IP 地址转换接口 TCP 协议通信程序的编写 套接字接口介绍 多进程实现多执行流 多线程实现多执行流 UDP 协议通信程序的编写 UDP 协议 无连接 不

随机推荐

  • THWATCH-01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步

    THWATCH 01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步 一级目录 二级目录 三级目录 一 cubemx配置 1 使用cubemx配置串口 2 配置IIC1 3 配置时钟和SWDIO下载口 二 修改KEIL工程
  • js冒泡排序两种方法(for循环、数组内置对象sort方法)

    一 利用for循环的嵌套来实现冒泡排序 冒泡排序 升序降序在于if条件中大于号和小于号 升序 var brr 8 68 6 88 86 666 99 98 var pemp 注意对循环体for的理解 自己顺一遍效果最佳 for var i
  • libuv初学者学习笔记

    开始阅读前 我简单的理解觉得是 类似于leetcode的一种题 外部同时启动开始 但是内部严格的按照线程1 gt 线程2的顺序发生过程 libuv框架 从上往下看 从左往右分成网络IO与文件IO等操作 网络I O看 linux平台通过底层e
  • js逆向之加密参数还原与模拟

    js逆向之加密参数还原与模拟 加密参数还原的逻辑很简单 找到代码中加密参数的生成过程 然后模拟出相同的方法 很多时候会卡到加密参数定位上 然后遇到混淆加密过的复杂Js 导致还原的过程无比艰辛 准备了由易到难的逆向案例 带大家体验精彩的逆向过
  • 【unity笔记】图解 Vector3.SignedAngle()方法的返回值

    这个方法可以理解为 两个向量之间的夹角 有符号的 我会将它想象成 将两个向量都放在坐标原点 一个向量要向哪个方向旋转多少度 才能与另一个向量重合 于是我在坐标原点放置了两个向量 OB和OA OB始终躺在X轴正方向 看看OA在4个象限的不同的
  • Pytorch——在一个Tensor中随机保留一个True,其他全为False

    需求 让一个 false false false false true true 的tensor 变成随机只保留一个true的tensor 且可以并行处理 要将一个布尔类型的张量 False False False False True T
  • 在vue中 echarts 饼图 legend 取消点击事件

    取消点击事件两种方法 legend selectedMode false 取消图例上的点击事件 myChart off legendselectchanged myChart on legendselectchanged function
  • 数学建模

    1 神经网络模型的基本概念是什么 神经网络模型模拟生物神经网络 通过大量互联节点来学习复杂的数据模式和关系 2 神经网络模型的主要优点是什么 可以自动学习时间序列数据的复杂非线性模式 不需要预先指定模型形式 具有很强的适应性和灵活性 3 神
  • WPF绘制图形

    利用WPF绘制简单图形 就像Winform那样 参考DrawToolsWPF using System using System Collections Generic using System Linq using System Text
  • 浏览器 hard refresh

    浏览器 hard referesh force refresh 不同于普通的按 F5 键刷新页面 它会先清当前页面的 cache 然后再刷新页面 这比手工找在浏览器设置中清当前站点的 cache 要方便的多 方法 Windows Ctrl
  • 【Java项目】多文件传输:文件分割与传输

    所谓的文件分割 并非真的将文件切割多个块存储发送 实质上是 用尺子和笔给整个文件块做上分割标记 那么发送时 文件的随机读写 可根据这些标记小块发送 接收端 也可以根据分割信息进行清点与组装 发送端与接收端只要约定好发送与接收 即传输协议 就
  • 算法可视化

    软件功能 以数组为例 一个数组是一个容器 对其进行可视化 主要针对数组的值查找 指定位置插入 指定位置删除进行可视化 软件针对每个数据结构可视化分两个方面 教学模式 主要针对数据结构每个方面进行讲解 可动画演示 实践模式 允许使用者自己通过
  • 汇编语言(王爽第三版)实验三

    实验三 题目预览 将下面的程序保存为t1 asm文件 将其生成可执行t1 exe 用Debug跟踪t1 exe的执行过程 写出每一步执行后 相关寄存器中的内容和栈顶的内容 PSP的头两个字节是CD20 用Debug加载t1 exe 查看PS
  • python3编码格式_python3编码方式

    ascii A 00000001 8位 1个字节 unicode A 00000000 00000000 00000000 00000001 32位 4个字节 utf 8 A 0000 0010 8位 1个字节 中文 00000000 00
  • 数据挖掘:认识数据

    越来越多的人认识到 数据对这个世界的影响越来越大 掌握数据就掌握了发言权 如何从数据中找到想要的知识 是得到数据之后最需要关心的 数据挖掘 也是知识发现的过程 1 理解数据 现实世界中 各行各业每时每刻都在产生数量庞大的数据集 让人眼花缭乱
  • 怎样才能跳过实名认证_和平精英qq怎么跳过实名认证!老司机告诉你仅需5步

    qq怎么跳过实名认证玩家是否知晓 虽然来说跳过实名认证对于手游来说并没有什么帮助 但是这个方式方法玩家还是需要知道的 这样能够帮助玩家轻松的做到某些事情 而这里就是样式玩家如何进行和平精英实名认证怎么跳过 其实在老司机手机仅需5步即可 和平
  • gtx1660是什么级别的_显卡天梯图秒懂GTX1660Ti性能 GTX1660Ti相当于什么显卡

    GTX1660Ti是NVIDIA二月份刚发布的一款显卡 从命名上看 它是历代英伟达显卡中 最 6 的显卡 名称中包含了3个6字 作为上一代甜品级GTX1060的继任者 而颇受关注 那么GTX1660Ti相当于什么显卡 其大致性能是什么水平呢
  • 色值的封装方法以及RGB和RGBA的区别

    取色值相关的方法 define RGB r g b UIColor colorWithRed r 255 f green g 255 f blue b 255 f alpha 1 f define RGBA r g b a UIColor
  • 项目搭建之代码规范化解决方案

    代码规范化解决方案Eslint Prettier Eslint 是一个插件化的 javascript 代码检测工具 用于代码格式检测 不符合Eslint规则的代码 会被检测到发出警告 报错 通过 eslintrc js 文件可以进行自定义的
  • 约瑟夫环:循环链表,数组

    约瑟夫环 1 循环链表 设计思路 2 顺序表 数组实现 设计思路 站成一圈 从1报数 报数为m则出列 求出列序列 1 循环链表 设计思路 用循环链表实现逻辑结构 mermaid svg Ejge7i4yvNzv6PZ2 label font