IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 约瑟夫环问题(单向循环链表) -> 正文阅读

[数据结构与算法]约瑟夫环问题(单向循环链表)

问题描述:
约瑟夫问题的一种描述是:编号为1,2,3~n的n个人按顺时针方向围坐一圈,没人持有一个密码(正整数),开始时任选一个整数作为报数上限值m,
从第一个人开始顺时针自1开始数序报数,报道m时停止报数。报m的人出列,将他的密码作为新的m值,从他顺时针的方向上下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。设计一个程序,求出出列顺序。
利用单向循环列表作为存储结构模拟过程,按照出列顺序打印出个人的编号。
例如:m的初始值为20,n=7,7个人的密码分别是3,1,7,2,4,8,4,出列的顺序为6,1,4,7,2,3,5.

解题思路:
1.利用m=m%n,进行求余计算,然后遍历到此节点的前一个结点,进行删除操作
2.每次输出后更改m和n的值
3.结束的条件

#include<iostream>
using namespace std;
struct ListNode//创建节点
{
	int number;//number代表每个人的序列号
	int password;//每个人的密码
	struct ListNode* next;
};
struct ListNode* readList(int n)//创建链表,传入参数n时确定链表的长度
{
	struct ListNode* head = NULL, * last = NULL, * p;
	int temp;
	int a = n;
	for (int i = 1; i <= a; i++)
	{
		scanf_s("%d", &temp);//temp代表每个人的密码
		p = (struct ListNode*)malloc(sizeof(struct ListNode));
		p->number = i;
		p->password = temp;
		p->next = NULL;
		if (head == NULL)
			head = p;
		else last->next = p;
		last = p;
		
	}
	last->next = head;//尾部结点指向头节点,构成单向循环链表
	return head;
}
int main()
{
	int m, n;
	struct ListNode* L;
	printf("请输入m和n的值");
	scanf_s("%d %d",&m,&n);
	printf( "请依次输入每个人的密码:");
	L = readList(n);
	while (n)//结束条件
	{
		
		struct ListNode* temp;
		m = m % n;
		for (int i = 1; i < m - 1; i++)//找到需要删除节点的前一个节点
		{
			L = L->next;
		}
		temp = L->next;
		L->next = temp->next;
		printf("%d", temp->number);
		n--;
		m = temp->password;
		if (n != 0)//条件
		{
			if (m % n != 1)
			{
				L = L->next;
			}
		}
		free(temp);
	}

	
	return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:11:23  更:2021-09-30 12:13:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 13:47:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码