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

循环单链表解决约瑟夫环_用链表解决约瑟夫环问题已知有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;
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 1602 c语言驱动程序,51单片机驱动LCD1602程序设计(C语言)很详细的教程

    1602 c语言驱动程序,51单片机驱动LCD1602程序设计(C语言)很详细的教程//********写指令函数************voidLCD_write_command(uchardat){LCD_DB=dat;LCD_RS=0;//指令LCD_RW=0;//写入LCD_E=1;//允许LCD_E=0;delay_n40us(1);//实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。}//****************************…

  • hadoop的简介_hadoop体系

    hadoop的简介_hadoop体系一、概述Hadoop起源:hadoop的创始者是DougCutting,起源于Nutch项目,该项目是作者尝试构建的一个开源的Web搜索引擎。起初该项目遇到了阻碍,因为始终无法将计算分配给多台计算机。谷歌发表的关于GFS和MapReduce相关的论文给了作者启发,最终让Nutch可以在多台计算机上稳定的运行;后来雅虎对这项技术产生了很大的兴趣,并组建了团队开发,从Nutch中剥离出分布式计算模块命名为“Hadoop”。最终Hadoop在雅虎的帮助下能够真正的处理海量的Web数据。…

    2022年10月17日
  • java 开发中 dom4j的简单用法「建议收藏」

    java 开发中 dom4j的简单用法「建议收藏」Java中处理XML的方式有很多种,个人任务dom4j还是比较好用的。下面介绍以下简单的使用方法先把import补充上1.首先我们一般会先根据各种方式得到一个xml格式的字符串或者文件,例如:

  • java多线程并发编程_java线程实现的三种方式

    java多线程并发编程_java线程实现的三种方式Java并发编程:Java创建线程的三种方式

  • goland 激活码[最新免费获取]

    (goland 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlbnNlSWQiOi…

  • 数据结构与算法(1)

    数据结构与算法(1)

    2021年11月12日

发表回复

您的电子邮箱地址不会被公开。

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