当前位置: 首页 > news >正文

【c语言习题】使用链表解决约瑟夫问题

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

链表有关知识点:【c语言】链表

题目:

约瑟夫问题

据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后, 39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从。

首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决。

Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个第31个位置,于是逃过了这场死亡游戏。

数组方法:【c语言习题】使用数组解决约瑟夫问题


约瑟夫问题 目录

  • 题目:
  • 过程分析:
  • 淘汰过程图解
  • 完整代码:
  • 结果:

过程分析:

定义链表节点类型Node,包含两个域:data和指向下一个节点的指针next。

typedef struct node //定义链表 节点
{int data;struct node* next;
}Node;

定义函数void fun(int n, int m),参数n为总人数,m为报数出局的数字

void fun(int n, int m)  //总共有n个人,报数为m的人出局 

初始化循环链表:

创建头结点head
head->data赋值为1
head->next赋值为NULL

然后用p和q两个指针完成插入操作,让p指向headq表示新插入的节点

	//初始化循环链表Node* head = NULL;	//头节点head = malloc(sizeof(Node));  head->data = 1;       //起始编号head->next = NULL;    Node* p = head;Node* q = NULL;

尾插法创建链表并构造循环链表:

从2开始遍历创建剩下的N-1个结点,每个结点依次插入到链表的尾部,即将p->next=r; q=p;
最后将最后一个节点p的next指针指向头节点head,完成循环链表的构建

for (int i = 2; i <= n; i++)//创建链表的n-1个节点{q = malloc(sizeof(Node));q->data = i;q->next = NULL;p->next = q;//插入节点p = q;}p->next = head;   //最后一个节点的next指向头节点p = head;  //记录头节点      

找到需要淘汰的节点:

计数器m每次加一,同时移动p指针,当m变成选定的淘汰数字时,
保留p指针位置(即将要淘汰的同学的位置),然后将p指向下一个同学
将淘汰同学输出,并将p指向下一个同学继续报数

while (p->next != p)  //链表中只剩下最后一个节点{for (int i = 1; i < m; i++)  //报数为m出局 {q = p;   //通过临时指针保存所对应节点的前一个节点的地址,最终找到需要删除的节点p,并输出节点datap = p->next; }printf("%d ", p->data);q->next = p->next;p = p->next;  //重置p重新报数}

当只有一个节点时,结束淘汰循环

printf("%d\n", p->data);printf("存活最后的%d位\n", m-1);free(q);free(head);q = NULL;head = NULL;

淘汰过程图解

在这里插入图片描述

完整代码:

#include <stdio.h>
typedef struct node //定义链表 节点
{int data;struct node* next;
}Node;void fun(int n, int m)  //总共有n个人,报数字为m的人出局 
{//初始化循环链表Node* head = NULL;	//头节点head = malloc(sizeof(Node));  head->data = 1;       //起始编号head->next = NULL;    Node* p = head;Node* q = NULL;for (int i = 2; i <= n; i++)//创建链表的n-1个节点{q = malloc(sizeof(Node));q->data = i;q->next = NULL;p->next = q;//插入节点p = q;}p->next = head;   //最后一个节点的next指向头节点p = head;  //记录头节点      while (p->next != p)  //链表中只剩下最后一个节点{for (int i = 1; i < m; i++)  //报数为m出局 {q = p;   //通过临时指针保存所对应节点的前一个节点的地址,最终找到需要删除的节点p,并输出节点datap = p->next; }printf("%d ", p->data);q->next = p->next;p = p->next;  //重置p重新报数}printf("%d\n", p->data);printf("存活最后的%d位\n", m-1);free(q);free(head);q = NULL;head = NULL;
}int main()
{int n, m;printf("请输入总人数:");scanf_s("%d", &n);printf("请输入报数的数字:");scanf_s("%d", &m);fun(n, m);system("pause");return 0;
}

结果:

在这里插入图片描述


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

相关文章:

【c语言习题】使用链表解决约瑟夫问题

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…...

JVM之类的初始化与类加载机制

类的初始化 clinit 初始化阶段就是执行类构造器方法clinit的过程。此方法不需定义&#xff0c;是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来。构造器方法中指令按语句在源文件中出现的顺序执行。clinit不同于类的构造器。(关联&#xff1a;…...

面试专题:java 多线程(1)----synchronized关键字相关问答

在java 多线程 面试中最多问题1.悲观锁和乐观锁&#xff1b;2.synchronized和lock的区别&#xff1b;3.可重入锁和非可重入锁的区别&#xff1b;4.多线程是解决什么问题的&#xff1b;5.线程池解决什么问题的&#xff1b;6.线程池原理&#xff1b;7.线程池使用注意事项&#xf…...

VMware SD-WAN 5.2 发布 - 软件定义的 WAN

VMware SD-WAN 5.2 发布 - 软件定义的 WAN SD-WAN 解决方案的领导者 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-sd-wan-5/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 产品概述 软件定义的 WAN (SD-WAN)…...

Oracle+11g+RAC+PSU_EAM(2)

2.15 解压安装介质 在获取开篇1.2节中提到的安装介质如下&#xff1a; [rootebsrac1 ~]# ls -l -rw-r–r– 1 root root 1358454646 Apr 20 16:22 p13390677_112040_Linux-x86-64_1of7.zip -rw-r–r– 1 root root 1142195302 Apr 20 16:29 p13390677_112040_Linux-x86-64_…...

智能出行 驱动未来|2023 开放原子全球开源峰会 CARSMOS 开源智能出行生态年会即将启幕

由开放原子开源基金会主办&#xff0c;元遨 / CARSMOS 开源智能出行项目组协办&#xff0c;深信科创、Futurewei Technologies、Open Motors、北极雄芯等单位共同承办的 2023 开放原子全球开源峰会 “CARSMOS 开源智能出行生态年会” 将于 6 月 12 日在北京经开区北人亦创国际会…...

Linux:centos:周期性计划任务管理《crontab》

crontab常用基础属性 -e 编辑计划任务 -l 查看计划任务 -r 删除计划任务 -u 指定用户的计划任务 首先创建一个名为test的用户名 crontab时间规定 格式&#xff1a;分钟 小时 日期 月份 星期 命令 分钟-- 0-59整数 小时 -- 0-23整数 日期 -- 1--31 整数 月份 -- 1-12 整数 星期…...

克拉默法则证明(Cramer‘s Rule)

若 n 个方程 n 个未知量构成的非齐次线性方程组&#xff1a; { a 11 x 1 a 12 x 2 . . . a 1 n x n b 1 a 21 x 1 a 22 x 2 . . . a 2 n x n b 2 . . . . . . a n 1 x 1 a n 2 x 2 . . . a n n x n b n \begin{equation*} \begin{cases} a_{11}x_{1} a_ {12}x_{2}…...

【接口防刷】处理方案

【接口防刷】 欢迎使用【接口防刷】常见的处理方案访问次数和频率限制验证码校验登录校验机制数据交互加密异常监测机制附录 欢迎使用【接口防刷】常见的处理方案 接口防刷处理方案是指为了防止恶意攻击或非法数据采集&#xff0c;采取一系列技术措施来保护接口数据的安全和完…...

安装Linux-SUSE操作系统

文章目录 一、安装Linux-SUSE系统1、环境准备2、SUSE 镜像的下载2.1、下载企业服务器2.2、ARM和桌面的ISO 3、安装SUSE4、配置本地 yum 源5、SUSE常用安装命令6、在 SUSE系统上安装mysql数据库步骤&#xff1a;7、破解SUSE系统root密码 一、安装Linux-SUSE系统 1、环境准备 操…...

二、机器人的结构设计

1 、螺丝连接的坚固性 坚固性是机器人能顺利完成指定任务的一个重要条件&#xff0c;无论我们程序设计的如何完美&#xff0c; 如果不能保证机器人具有坚固性和稳定性&#xff0c;就无法保证任务的顺利完成&#xff0c;机器人在运行时如 果发生散架和分裂都会影响其功能的实现…...

UITableView学习笔记

看TableView的资料其实已经蛮久了&#xff0c;一直想写点儿东西&#xff0c;却总是因为各种原因拖延&#xff0c;今天晚上有时间静下心来记录一些最近学习的TableView的知识。下面进入正题&#xff0c;UITableView堪称UIKit里面最复杂的一个控件了&#xff0c;使用起来不算难&a…...

Nginx反向代理与负载均衡

简介 Nginx 是一款高性能、轻量级的 Web 服务器软件&#xff0c;常用于反向代理和负载均衡。以下是 Nginx 反向代理和负载均衡的基本原理和实现方式 1、反向代理 当客户端请求访问一个 Web 服务器时&#xff0c;首先会发送请求到 Nginx&#xff0c;然后 Nginx 将请求转…...

Delaunay三角剖分学习笔记

文章目录 Delaunay三角剖分学习笔记1 Voronoi \text{Voronoi} Voronoi图1.1 定义与性质 2 三角剖分2.1 定义与性质2.2 质量(quality)评定标准 3 Delaunay三角剖分3.1 定义3.2 准则与性质 4 Delaunay三角剖分算法4.1 Bowyer-Watson算法4.1.1 算法步骤&#xff1a;4.1.2 算法伪代…...

@Resource和@Autowired的区别

1.相同点 Resource和Autowired这两个注解的作用都是在Spring生态里面去实现Bean的依赖注入 2.不同点 2.1 Autowired 首先&#xff0c;Autowired是Spring里面提供的一个注解&#xff0c;默认是根据类型来实现Bean的依赖注入。 Autowired注解里面有一个required属性默认值是t…...

linux达梦数据库的安装与卸载

一、安装 创建dmdba用户及用户组 创建安装目录&#xff1a; mkdir -p /dm8 创建组 &#xff1a;groupadd dinstall 创建用户 &#xff1a;useradd -g dinstall dmdba 设置密码 &#xff1a;passwd dmdba 创建文件夹&#xff1a;mkdir /dmdata 更改安装目录所有者&#xff1a; c…...

生成式模型的质量评估标准

Sample Quality Matrix 如何评价生成式模型的效果&#xff1f;ISFIDsFIDPrecision & RecallPrecisonRecall计算precision和recall 如何评价生成式模型的效果&#xff1f; Quality: 真实性&#xff08;逼真&#xff0c;狗咬有四条腿&#xff09; Diversity: 多样性&#x…...

pinpoint安装部署(相关博客合集)

pinpoint安装部署 说明一、PinPoint介绍及工作原理1.1 确定部署的组件及服务 二、相关组件版本兼容情况2.1 确定版本 三、部署3.1 HBASE3.2 agent 说明 本博客写在搭建PinPoint之前&#xff0c;主要是用来记录查阅的相关博客资料&#xff0c;等到动手搭建完再更新实际部署操作…...

python-匿名函数(lambda函数)

匿名函数&#xff08;lambda函数&#xff09; 匿名函数&#xff08;也称为lambda函数&#xff09;是一种在代码中定义临时函数的方式&#xff0c;它没有明确的函数名称。匿名函数通常用于需要简短、一次性的函数定义&#xff0c;特别是在处理函数作为参数传递或函数返回的情况…...

JS逆向常见情况

分类&#xff1a;JS压缩混淆加密 与 URL/API参数的加密 代码压缩&#xff1a;去除不必要的空格换行等内容&#xff0c;使源码变成几行&#xff0c;大大降低可读性并提升网站加载速度 代码混淆&#xff1a;使用变量替换、字符串阵列化、控制流平坦化、多态变异、僵尸函数…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...