求解约瑟夫问题

思路:

我们要创建两个指针

有一个指针pcur指向头结点,该pcur作为报数的指针,还有一个指针ptail指向尾结点,作为记录pcur的地址

每报数为m时,pcur指向下一个元素的地址,ptail销毁报数为m的地址,然后ptail指向pcur,继续重新报数

最后当只剩一个元素时,即pcur->next==pcur,退出循环

答案:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct ListNode {
	int val;
	struct ListNode* next;
}ListNode;
ListNode* buyNode(int x)        //申请一个新结点
{
	ListNode* node = (ListNode*)malloc(sizeof(ListNode));
	if (node == NULL)     //如果开辟空间失败
	{
		perror("malloc fail!");
		exit(1);
	}
	node->val = x;
	node->next = NULL;
	return node;
}
ListNode* creatCircle(int n)    //创建循环链表
{
	ListNode* phead = buyNode(1);    //创建第一个结点
	ListNode* ptail = phead;        
	for (int i = 2; i <= n; i++)   //创建n-1个结点
	{
		ptail->next = buyNode(i);
		ptail = ptail->next;
	}
	ptail->next = phead;   //首尾相连
	return ptail;
}
void ysf(int n, int m)    //约瑟夫函数
{
	ListNode* prev = creatCircle(n);    //尾结点
	ListNode* pcur = prev->next;       //头结点
	int count = 1;
	while (pcur->next != pcur)   //如果剩余人数大于1
	{
		if (count == m)    //如果已经有m次报数了
		{
			printf("%d->", pcur->val);  //打印出圈人员
			prev->next = pcur->next;   //让前一个结点直接链接下一个结点
			free(pcur);   //销毁空间
			pcur = prev->next;   //报数从下一个结点开始
			count = 1;   //报数次数回到1
		}
		else   //没到m次报数
		{
			prev = pcur;    //往前移动一位
			pcur = pcur->next;    //往前移动一位
			count++;   //计数器加1
		}
	}
	printf("%d", pcur->val);   //打印最后一个出圈人员
	free(pcur);   //销毁空间
}
int main()
{
	int n = 0, m = 0;
	printf("请输入n和m的值:\n");
	scanf("%d%d", &n, &m);
	ysf(n, m);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/581217.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分光光度法基本原理与应用

本文介绍分光光度法基本原理与应用。 分光光度法是分光光度计采用的方法&#xff0c;在医疗检测仪器&#xff0c;实验室测量仪器中经常使用。本文简要分析其原理&#xff0c;并给出实际工作过程中如何应用及应用过程中可能的误差来源。 1.基本概念 设一平行单色光垂直照射某…

网络安全工程师必备的6个渗透测试工具

渗透测试是模拟黑客攻击&#xff0c;评估系统安全性的重要方法。 网络安全工程师需要掌握各种渗透测试工具&#xff0c;才能有效地发现和修复漏洞。 1. Nmap 功能: 强大的网络扫描器&#xff0c;可以扫描网络拓扑、识别主机和服务、发现开放端口和漏洞。 用途: 信息收集、漏洞…

一加Ace3/12/Ace2pro手机ColorOS14刷KernelSU内核ROOT-解决无限重启变砖

一加Ace3/一加12/一加11等手机升级了安卓14底层&#xff0c;并且ColorOS版本也更新到了14版本界面和功能都比之前的系统表现更加优秀&#xff0c;但刷机方面&#xff0c;相对之前存在一些差异&#xff0c;特别是KernelSU内核级别root权限&#xff0c;不再支持一键刷入KernelSU通…

MySQL的事务,函数和索引

事务 数据库的事务是一种机制&#xff0c;一种操作序列&#xff0c;包含了一组数据库的操作命令 简单了解&#xff1a;如果一个包含多个步骤的业务操作&#xff0c;被业务管理&#xff0c;要么这些操作同时操作成功&#xff0c;要么同时操作失败 事务是一个不可分割的工作逻…

HTTP网络协议,接口请求的内容类型 content-type(2024-04-27)

1、简介 Content-Type&#xff08;内容类型&#xff09;&#xff0c;一般是指网页中存在的 Content-Type&#xff0c;用于定义网络文件的类型和网页的编码&#xff0c;决定浏览器将以什么形式、什么编码读取这个文件&#xff0c;这就是经常看到一些 PHP 网页点击的结果却是下载…

【Kylin】V10系统在VMware中分辨率太小,无法通过GUI修改分辨率的解决方法

【Kylin】V10系统在VMware中分辨率太小&#xff0c;无法通过GUI修改分辨率的解决方法 解决办法1.打开终端方法1&#xff1a;方法2 2.输入 xrandr 命令&#xff0c;查询分辨率支持的列表3.选择适合的分辨率 。 例如&#xff1a;xrandr -s 1440x900_60 问题如下图&#xff1a; 保…

C++感受10-Hello Object 生死版•下

搞懂以下三个重要知识点&#xff1a; 对象生命周期对象内存模型对象的可见性 ff12-HelloObject-生死版-下 1. 生命周期 只要是数据&#xff0c;就需要占用内存空间。程序将内存分成多个区&#xff0c;其中最重要的是栈区和堆区。放在栈区的数据&#xff0c;称为栈数据或栈对象&…

uniapp分包,以及通过uni-simple-router进行分包

先说一下uniapp的直接分包方式&#xff0c;很简单&#xff1a; 配置分包信息 打开manifest.json源码视图&#xff0c;添加 “optimization”:{“subPackages”:true} 开启分包优化 我们在根目录下创建一个pagesA文件夹&#xff0c;用来放置需要分包的页面 然后配置路由 运行到…

开源啦!一键部署免费使用!Kubernetes上直接运行大数据平台!

市场上首个K8s上的大数据平台&#xff0c;开源啦&#xff01; 智领云自主研发的首个 完全基于Kubernetes的容器化大数据平台 Kubernetes Data Platform (简称KDP) 开源啦&#x1f680;&#x1f680; 开发者只要准备好命令行工具&#xff0c;一键部署 Hadoop&#xff0c;Hi…

【论文笔记】Language Models are Few-Shot Learners B部分

Language Models are Few-Shot Learners B 部分 回顾一下第一代 GPT-1 &#xff1a; 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式&#xff1b;模型架构是基于 Transformer 的叠加解码器&#xff08;掩码自注意力机制、残差、Layernorm&#…

【win10相关】更新后出现未连接到互联网的问题及解决

问题背景 在win10更新完系统之后&#xff0c;第二天电脑开机后&#xff0c;发现无法上网&#xff0c;尝试打开百度&#xff0c;但是出现以下图片&#xff1a; 经过检查&#xff0c;发现手机是可以上网的&#xff0c;说明网络本身并没有问题&#xff0c;对防火墙进行了一些设置…

采用前后端分离Vue,Ant-Design技术开发的(手麻系统成品源码)适用于三甲医院

开发环境 技术架构&#xff1a;前后端分离 开发语言&#xff1a;C#.net6.0 开发工具&#xff1a;vs2022,vscode 前端框架&#xff1a;Vue,Ant-Design 后端框架&#xff1a;百小僧开源框架 数 据 库&#xff1a;sqlserver2019 系统特性 麻zui、护理、PACU等围术期业务全覆…

【机器学习】集成学习---Bagging之随机森林(RF)

【机器学习】集成学习---Bagging之随机森林&#xff08;RF&#xff09; 一、引言1. 简要介绍集成学习的概念及其在机器学习领域的重要性。2. 引出随机森林作为Bagging算法的一个典型应用。 二、随机森林原理1. Bagging算法的基本思想2. 随机森林的构造3. 随机森林的工作机制 三…

3. uniapp开发工具的一些事

前言 新的一天&#xff0c;又要开始卷起来了&#xff0c;开发程序开发当前离不开开发工具&#xff0c;一个好的开发工具办事起来那必然是事倍功半的...本文主要分享了关于uniapp里开发工具的一些事~ 概述 阅读时间&#xff1a;约5&#xff5e;7分钟&#xff1b; 本文重点&am…

Web程序设计-实验04 JavaScript对象

题目 【实验主题】 个人所得税计算 【实验任务】 1、根据【任务提示】和【参考资源】材料&#xff0c;自学2012版月工资、年终奖个人所得税计算规则。 2、新建 .js文件&#xff0c;以JSON格式定义个人所得税对象。 其中属性涉及三个层次&#xff1a; 1&#xff09;第一层…

03-MVC执行流程-参数解析与Model

重要组件 准备Model&#xff0c;Controller Configuration public class WebConfig {ControllerAdvicestatic class MyControllerAdvice {ModelAttribute("b")public String bar() {return "bar";}}Controllerstatic class Controller1 {ResponseStatus(H…

CUDA的基础知识

文章目录 数据精度CUDA概念线程&线程块&线程网络&计算核心GPU规格参数内存 GPU并行方式数据并行流水并行张量并行混合专家系统 数据精度 FP32 是单精度浮点数&#xff0c;用8bit 表示指数&#xff0c;23bit 表示小数&#xff1b;FP16 是半精度浮点数&#xff0c;用…

SpringBoot常用注解与注意事项

Spring Boot 是一个用于快速开发、运行和管理 Spring 应用程序的框架。它大量使用了注解&#xff08;Annotations&#xff09;来简化配置和开发流程。 以下是一些 Spring Boot 中常用的注解及其注意事项&#xff1a; 1.常用注解 SpringBootApplication 这是一个组合注解&#…

OpenHarmony 项目实战:智能体重秤

一、简介 本 demo 基于 OpenHarmony3.1Beta 版本开发&#xff0c;该样例能够接入数字管家应用&#xff0c;通过数字管家应用监测体重秤上报数据&#xff0c;获得当前测量到的体重&#xff0c;身高&#xff0c;并在应用端形成一段时间内记录的体重值&#xff0c;以折线图的形式…

vivado Aurora 8B/10B IP核(4)-数据流接口(Streaming Interface)

Streaming 接口 Transmitting and Receiving Data&#xff08;发送和接收数据&#xff09; 流式接口允许将Aurora 8B/10B通道用作管道。 初始化后&#xff0c;通道始终可用于写入&#xff0c;除非发送时 钟补偿序列。 核心数据传输符合AXI4-Stream协议。当s_axi_tx_tvalid被取…
最新文章