首页 > 其他分享 >DS循环链表—约瑟夫环

DS循环链表—约瑟夫环

时间:2024-09-23 14:19:17浏览次数:11  
标签:node head int len next 链表 约瑟夫 data DS

题目描述

N个人坐成一个圆环(编号为1 - N),从第S个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。

例如:N = 3,K = 2,S = 1。2号先出列,然后是1号,最后剩下的是3号。

要求使用循环链表实现。

输入

测试数据有多组

每组包括3个数N、K、S,表示有N个人,从第S个人开始,数到K出列。(1 <= N <= 10^6,1 <= K <= 10,  1 <= S <= N)

输出

出列的人的编号

#include<iostream>
using namespace std;
class node
{public:
	int data;
	node* next;
	node* prior;
	node()
	{
		data = 0;
		next = NULL;
		prior = NULL;
	}
};
class linklist
{
public:
	node* head;
	node* end;
	int len;
	linklist()
	{
		len = 0;
	}
	//创建循环链表
	void creat(int n)
	{
		len = n;
		node* p = new node;
		node* q = p;
		for (int i = 1; i <= n; ++i)
		{
			node* r = new node;
			r->data = i;
			q->next = r;
			q->prior = q;
			q = r;
			if (i == n)
			{
				q->next = p->next;
			}			
		}
		head = p->next;
	}
	void print()
	{
		node* p = head;
		int i = 0;
		while (i!=len)
		{
			cout << p->data ;
			if (i != len - 1)
			{
				cout << " ";
			}
			i++;

			p = p->next;
		}
		cout << endl;
	}
	linklist merge(int k, int s)
	{
		linklist a;
		node* qq = new node;
		node* q = qq;
		node* p = head;
		int i = 1;
		int l = 0;
		while (len!=1)
		{
			if (i == s)
			{
				int j = 1;
				while (j != k - 1)
				{
					j++;
					p = p->next;
				}
				node* r = p->next;
				q->next = r;
				l++;
				len--;
				q = r;
				p->next=r->next;
				i--;
			}
			i++;
			p = p->next;
		}
		node* r = new node;
		r->data = p->data;
		q->next = r;
		q = r;
		l++;
		a.head = qq->next;
		a.len = l;
		return a;
	}
};
int main()
{
	int n, k, s;
	while (cin >> n >> k >> s)
	{
		linklist a;
		a.creat(n);
		linklist p = a.merge(k, s);
		p.print();		
	}
}

标签:node,head,int,len,next,链表,约瑟夫,data,DS
From: https://blog.csdn.net/2301_80770184/article/details/142443476

相关文章

  • DS堆栈--逆序输出(不使用STL栈)
    题目描述请编写堆栈操作的具体实现代码,实现字符串的逆序输出,需自行实现堆栈。输入一个字符串,按字符按输入顺序压入堆栈,然后根据堆栈后进先出的特点,做逆序输出输入第一行输入t,表示有t个测试实例第二起,每一行输入一个字符串,注意字符串不要包含空格字符串的输入可参考如下......
  • qudsl 使用备忘录
    前提:已知A表,B表,且 A表一对多B表查询B表数据的同时,同步关联的A表数据1. A表的实体类中:@OneToMany(mappedBy="b",fetch=FetchType.LAZY)@JsonIgnoreprivateSet<B>bs=newHashSet<>();2. B表的实体类中:@QueryInit("*.*.*.*")@ManyToOne(......
  • MySQL binlog --skip-gtids --include-gtids --exclude-gtids 参数作用及使用示例
    在MySQL中,--skip-gtids选项用于完全跳过全局事务标识符(GTID)的处理,而--include-gtids和--exclude-gtids则是用于选择性地应用或跳过特定的GTID范围内的事务。这些选项通常在MySQL的二进制日志(binlog)消费者工具(如mysqlbinlog)中使用,而不是直接应用于MySQL服务器本身......
  • 国产化:TongRDS替代Redis
    背景:国产化要求,内存数据缓存中间件要换国产产品,这里简单记录一下替换过程,项目是springboot微服务结构。官方文档比较全,这里只是个人记录的最简化的版本。1安装企业版TongRDS分为2个节点,我拿到的版本就是企业版,所以下面的都默认是企业版。分为中心节点和服务节点。安装......
  • [Python手撕]判断回文链表
    #Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defisPalindrome(self,head:Optional[ListNode])->bool:deffindmid(he......
  • 为何生成静态页的时候或者上传附件过程中有报错:Maximum execution time of 30 seconds
    错误信息 Maximumexecutiontimeof30secondsexceeded 表明PHP脚本的执行时间超过了服务器设定的最大执行时间限制。这通常发生在生成静态页面或上传大文件等耗时较长的操作中。解决方案方法一:修改 php.ini 文件找到 php.ini 文件:通常 php.ini 文件位于服务......
  • 出现这种报错怎么办?SQLSTATE[HY000]: General error: 1615 Prepared statement needs
    如果你遇到由于数据库配置问题导致前后台无法打开的情况,可以通过修改数据库配置文件来解决。具体步骤如下:解决步骤第一步:打开数据库配置文件使用Notepad++打开配置文件:使用Notepad++或其他专业文本编辑器打开数据库配置文件 application/database.php。例如,假设你的......
  • SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared
    当遇到由于数据库配置问题导致前后台无法打开的情况时,可以通过修改数据库配置文件来解决问题。具体步骤如下:1.准备工作备份数据库配置文件:在修改前,建议先备份 application/database.php 文件。sh cpapplication/database.phpapplication/database.php.bak准......
  • 链表-栈例题
    MT2135调整队伍马蹄集:链表小码哥迎来了他大学的第一次军训,军训的第一个项目就是列队,每个同学在队伍中都有属于自己的编号。但在练习过程中,教官怎么看这支队伍怎么不顺眼,于是决定调整一下队伍的顺序。为了顺便考验同学们的反应力,教官与学生们约定了一个口令,每当他说xy0,x号同学......
  • Stylized Smooth Clouds 卡通风格化云朵包
    下载:​​Unity资源商店链接资源下载链接效果图:......