循环单链表解决约瑟夫环_用链表解决约瑟夫环问题

循环单链表解决约瑟夫环_用链表解决约瑟夫环问题已知有5个人围坐在一张圆桌的周围,从编号为3的人开始顺时针数数,数到2的那个人出列淘汰,然后从出列的下个一人继续数,依次循环,直到只剩下最后一个人。(使用循环链表实现约瑟夫环)代码如下:#include “pch.h”#include<string>#include<fstream>#include<Windows.h>#include <i…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

已知有5个人围坐在一张圆桌的周围,从编号为3的人开始顺时针数数,数到2的那个人出列淘汰,然后从出列的下个一人继续数,依次循环,直到只剩下最后一个人。(使用循环链表实现约瑟夫环)

在这里插入图片描述
代码如下:

#include "pch.h"
#include<string>
#include<fstream>
#include<Windows.h>
#include <iostream>

using namespace std;

//循环链表基本实现

//typedef struct LNode
//{ 
   
// int date;
// LNode* next;
//}*LinkList;
//
新建单链表
//void InitList(LinkList &L)
//{ 
   
// L = new LNode;
// L->next = NULL;
//}
//
给链表增加节点
//void GetLinkList(LinkList &L, int n)
//{ 
   
// LNode *p;
// LNode *r;
// r = L;
// char filename[20] = { 0 };
//
// cout << "请输入单向有序链表"
// <<"数据文件名字(文件名+“.txt”),例如List.txt"
// << ".txt" << endl;
//
// gets_s(filename);
// fstream file;
// file.open(filename);
// if (!file)
// { 
   
// cout << "文件数据打开失败!" << endl;
// Sleep(5000);
// exit(0);
// }
// 
// while (!file.eof())
// { 
   
// p = new LNode;
// file >> p->date;
// p->next = NULL; //前插插
// r->next = p;
// r = p;
// n++;
//
// }
//
// file.close();
//}
//
//void OutPutList(LinkList L)
//{ 
   
// LNode *p;
// p = L->next;
// while (p)
// { 
   
// cout << p->date << " ";
// p = p->next;
// }
//}
//
链表合并函数
//void MergeLinkList(LinkList &la, LinkList &lb, LinkList &lc)
//{ 
   
// LinkList pa, pb, pc;
// pa = la->next;
// pb = lb->next;
// 
// lc = la;
// pc = lc;
// 
// //两段链表都有节点
// while (pa&&pb)
// { 
   
// if (pa->date<=pb->date)
// { 
   
// pc->next = pa;
// pc = pa;
// pa = pa->next;
// }
// else
// { 
   
// pc->next = pb;
// pc = pb; 
// pb=pb->next;
// }
//
// pc->next = pa ? pa : pb;
//
// }
//}
//
//int main()
//{ 
   
// LinkList la,lb, lc;
//
// InitList(la);
// GetLinkList(la, 1);
// OutPutList(la);
// cout << endl;
//
// InitList(lb);
// GetLinkList(lb, 1);
// OutPutList(lb);
// cout << endl;
//
// InitList(lc);
// MergeLinkList(la, lb, lc);
// OutPutList(lc);
//
// return 0;
//}
//


//约瑟夫环实现
typedef struct Person
{ 
   
	int numberdate;
	Person *next;
}*LinkPerson;

LinkPerson initList(int n)
{ 
   
	LinkPerson L = new Person;
	L->numberdate = 1;
	L->next = NULL;
	Person*p = L;

	for (int i = 2; i <= n; i++)
	{ 
   
		Person*body = new Person;
		body->numberdate = i;
		body->next = NULL;
		p->next = body;
		p = p->next;
	}
	p->next = L;		//首尾相接
	return L;
}

void KillPerson(LinkPerson L, int a, int b)
{ 
   	//a是编号,b是数几淘汰
	LinkPerson tail = L;
	while (tail->next != L)
	{ 
   
		tail = tail->next;
	}

	LinkPerson p = L;
	//把链表的开头给开始的那个人
	while (p->numberdate != a)
	{ 
   
		tail = p;
		p = p->next;
	}
	//当p->next=p时说明只剩下一个人,游戏结束
	while (p->next != p)
	{ 
   
		//重新写入剩下的游戏玩家
		for (int i = 1; i < b; i++)
		{ 
   
			tail = p;
			p = p->next;
		}
		//从链表上将p结点就删除了
		tail->next = p->next;
		cout << "被杀的人是" << p->numberdate << "号" << endl;
		delete p;
		p = tail->next;

	}
	cout << "最后胜出的是:" << p->numberdate << endl;
	delete p;
}

int main()
{ 
   
	int n, a, b;
	cout << "请输入玩家数:";
	cin >> n;
	cout << "请输入从几号玩家开始:";
	cin >> a;
	cout << "请输入每次步数:";
	cin >> b;

	Person *L= initList(n);
	KillPerson(L, a, b);
	return 0;
}


结果为:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170977.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 斯密特正交化(matlab)

    斯密特正交化(matlab)斯密特正交化 matlab 数学过程伪代码如下 functionb Gram Schmidt Orthogonaliz a row col size a b 1 a 1 foriin2 colforjin1 ia i a i b j T a i b j T b j

    2025年10月18日
    3
  • 数据结构中各种时间复杂度_时间复杂度o(n)

    数据结构中各种时间复杂度_时间复杂度o(n)目录一、概念1.1、算法效率1.2、时间复杂度1.3、空间复杂度二、计算2.1、大O的渐进表示法2.2、时间复杂度计算例题:2.3、空间复杂度计算例题三、有复杂度要求的习题一、概念1.1、算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作…

    2025年8月1日
    5
  • 无刷电机的驱动

    无刷电机的驱动原文地址:http://www.dzkf.cn/html/zonghejishu/2009/0319/3706.html前言:   有关本文所谈论的无刷电机内容,只涉及低速飞行类航模电调的小功率无传感器应用,讲解的理论比较浅显易懂,旨在让初学者(象笔者本人)能够对无刷电机有一个比较快的认识,掌握基本原理和控制方法,可以在短时间内达到应用目的。理论性的内容涉及模拟电路知识、基础电子线路

    2022年8月30日
    5
  • auto是什么_auto C++

    auto是什么_auto C++autoauto让编译器通过初始值来推算变量的类型——–因此,auto定义的变量必须有初始值.1.让引用对象作为初始值————————————–使用引用其实是使用引用的对象                                 inti=0,&c=i;                  a

    2025年10月9日
    6
  • 15个权威的PLC学习资料下载地址 (西门子、三菱、欧姆龙)

    15个权威的PLC学习资料下载地址 (西门子、三菱、欧姆龙)论坛贴吧及工作中经常有人问PLC的学习资料去哪里下载,比如博图TIA软件哪里下载,怎么安装。三菱PLC的编程软件哪里下载等等,一般得到的回复是去官网啊,可是去官网下载界面也不太好找。今天整理了一下,把西门子、三菱、欧姆龙的官方下载地址直接贴出来供大家直接使用。比如下文第一个链接西门子资料下载中心,不仅包括西门子相关编程软件的下载,还包括常见系列的编程手册、产品目录、新手必读等等。西门子…

    2022年10月18日
    3
  • kit中文_flask和django的对比

    kit中文_flask和django的对比#介绍ImageKit是用于处理图像的Django应用程序。如果需要从原图上生成一个长宽为50×50的图像,则需要ImageKit。ImageKit附带了一系列图像处理器,用于调整大小和裁剪等常见

    2022年7月29日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号