约瑟夫环问题

约瑟夫环问题 - Python 基本问题描述: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。(也类似于变态杀人狂问题)通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。通常,我们会要求输出最后一位出列的人的序号。那么这里主要研究的是最后一个出列的人的序... 阅读详情

第一种方法:递归(可跑1e9)
记 f(n) 为大小为 n ,间隔为 1 约瑟夫环的答案.
当 n 为偶数时:
答案为 2 f ( n / 2 ) − 1
当 n 为奇数时:
答案为 2 f ( n / 2 ) + 1

#include<iostream>
using namespace std;
int gui(int n)
{
	if(n<=2) return 1;
	else if(n%2==0) return 2*gui(n/2)-1;
	else return 2*gui(n/2)+1;
}
int main()
{
	int t,n;
	cin>>t;
	for(int i=1;i<=t;++i)
	{
		cin>>n;
		cout<<gui(n)<<endl;
	}
	return 0;
} 

第二种方法:用链表模拟(跑不到1e7)

#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{
    int s = 0, w = 1; char ch = getchar();
    while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar();}
    while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
    return s * w;
} 
struct node{
	int data;
	node *next;
};
int main()
{
	int n,t;
	cin>>t;
	for(int j=1;j<=t;++j)
	{
		node *head,*q,*p;
		cin>>n;
		for(int i=1;i<=n;++i)
		{
			p=new node;
			p->data=i;
			if(i==n)
			p->next=head;  //首尾相接
			else
			p->next=NULL;
			if(i==1) head=p;
			else q->next=p;
			q=p;
		}
		p=head;
		while(n>1)
		{
			p->next=p->next->next;   //做删除节点的操作
			p=p->next;
			n--;	
		}
		cout<<p->data<<endl;
	}
	return 0;
} 

第三种方法:打表找规律(可跑1e9)

#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
	ll t;
	ll n;
	cin>>t;
	for(int i=1;i<=t;++i)
	{
		cin>>n;
		if(n==1) cout<<0<<endl;
		else if(n==2) cout<<1<<endl;
		else if(n==3) cout<<3<<endl;
		else
		for(ll i=3,j=4;;i+=j,j*=2)
		{
			//cout<<i<<" "<<j<<endl;
			if(i==n)
			{
				cout<<n<<endl;
				break;
			}
			if(i>n)
			{
				j/=2;
				i-=j;
				n-=i;
				//cout<<i<<" "<<j<<endl;
				ll ans=n%j*2-1;
				cout<<ans<<endl;
				break;
			}
		}
	}
	return 0;
}

规律:
从2开始
1,3---------2个
1,3,5,7---------4个
1,3,5,7,9,11,13,15------------8个
1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31---------------16个
。。。。。。。。。。。。。。。

Cadence PCB SI仿真实战:如何手动添加VIA过孔模型提升板级链路精度 本文详细介绍了在Cadence PCB SI仿真中如何手动添加VIA过孔模型以提升DDR4/5设计的精度。通过参数化建模和三维全波建模技术,工程师可以有效解决高速设计中的信号完整性问题,显著降低仿真误差。文章还提供了实战案例和常见问题解决方案,帮助优化板级链路性能。 阅读详情

相关推荐

Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS

安装好了VINS-Mono所需的ROS noetic、Eigen3.4.0、Ceres2.10和OpenCV4.2.0等。VINS-Mono是在ROS melodic以及Ceres1的环境下开发的,因此需要适配高版本的环境。

zardforever123的博客 2万+

Josephu(约瑟夫、约瑟夫环) 问题

Josephu问题问题描述代码实现1.创建一个Boy类,表示一个节点2.创建一个环形的单向链表3.执行代码 问题描述 Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。 提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结

spade_Kwo的博客 331

多模态情感识别(MER)数据集实战指南:从IEMOCAP到应用落地

本文提供了多模态情感识别(MER)从数据集到应用落地的完整实战指南。以经典IEMOCAP数据集为例,详细讲解了音频、视觉、文本等多模态数据的预处理、特征提取与融合技术,并分享了模型训练调优心得及面向智能客服、在线教育等场景的部署考量,帮助开发者快速构建高效可用的MER系统。

h3i4j的博客 1071

014 题目: 约瑟夫环问题

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 代码演示: num = int(input("请输入人数:")) a_list = list(range(1,num+1)) n1 = 1 # 控制报数数字 n2 = 0 # 控制列表索引 while len(a_list) > 1: if n1 % 3 == 0: del a_list[n2] # del 语句来删除列表的元素 n1 +=

橙子爱学习的博客 422

Matlab 2023b 科研党必备:MOSEK 10.1.25 安装与配置全记录(附License过期解决方案)

本文详细介绍了在Matlab 2023b中安装与配置MOSEK 10.1.25的全过程,特别针对科研用户提供学术许可申请、证书文件部署及环境集成的实用指南。文章还包含常见问题解决方案和性能调优建议,帮助用户高效完成优化计算任务。

weixin_30598225的博客 171

爬取微博热搜并分析情绪趋势:NLP + 可视化一体化实践

本文介绍了如何用Python构建微博热搜关键词爬取与情绪分析系统。通过requests库获取微博热搜数据,使用snownlp进行中文情绪分析(0-1评分),并借助pandas、matplotlib和seaborn实现数据可视化。文章提供了从环境配置、数据采集到情绪计算和趋势图绘制的完整代码示例,同时建议扩展思路包括评论分析、多维度情绪分类和舆情预警系统搭建。这套方法可以帮助快速洞察公众情绪变化,为舆情监测和市场研究提供数据支持。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 821

约瑟夫环

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 数学思想: 无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上...

touchinsert 236

汽车Bootloader流程

根据ISO14229-1 写的汽车行业 Bootloader流程 1:编程前 → 先读取软硬件版本号 22 F1 XX 软件信息 22 F1 XX 硬件信息 → 进入扩展会话extend diagnostic sessions 功能寻址 10 03 → 编程条件检测routine control:ECU升级条件的判断,如车速,检测车的型号 31 01 02 03 → 关闭DTC检测,(由于很多节点收不到其它节点的报文后会记录DTC故障)功能寻址 85 02 → 关闭诊断通讯(禁止各个节点的应用报...

weixin_41320142的博客 2831

约瑟夫环——公式法(递推公式)

约瑟夫问题约瑟夫问题是个有名的问题:N个人围成一圈,第一个从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。 例如只有三个个人,把他们叫做A、B、C围成一圈,从A开始报数,报2的人被杀掉。 A开始报数,他报1。侥幸逃过一劫。 然后轮到B报数,他报2。非常惨,他被杀了 C接着从1开始报数 然后轮到A报数,他报2。也被杀死了。 最终胜利者是C 解决方案普通解

再难也要坚持 17万+

springboot整合sharding-jdbc实现分库分表详解

springboot整合sharding-jdbc实现分库分表详解

congge 9090

【从零开始学习 UVM】1.2、UVM 概述 —— UVM Installation(UVM 安装)

【从零开始学习 UVM】1.2、UVM 概述 —— UVM Installation(UVM 安装)

努力,加油每一天鸭~ 1945

巧解约瑟夫环问题

100个小孩手拉手围成一圈,从第1个小孩开始报数,数到3出列,下一个小孩继续从1开始报数,循环报数,求最后留在队列中的小孩的位置。 这是一道非常经典的算法题,我在面试的时候经常提到这道题。这道题是完全可以通过正向思维解答的,但遗憾的是,在所有面试的人中,几乎没有一个人可以正确地解答这道题。 那么,到底要如何解答这道题呢,我们一起来试试看! 解法一:生死看淡,不服就干 首先,我们尝试用正向思维...

欧阳锋工作室镜像 626

硬件工程师入门基础知识(一)基础元器件认识(二)

我们的电路输入一般是只有两种状态,0V 或者是其它的高电平(1.8V,3.3V,5V 等),截止状态一般不用怎么考虑,因为如果让三极管的 Vbe=0,自然就截止了,重要的是饱和状态如何保证。也就是说只要 Rb

小幽余生不加糖 1万+

约瑟夫环问题详解

在牛客网上做到一道题,是约瑟夫环的变型,所以借此学习一下新知识,并且巩固一下对题目意思的理解,这一篇仅作约瑟夫环问题的解释,下一篇再写题目: 1.首先,我们先来了解一下什么是约瑟夫环问题: 讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀...

tingyun_say的博客 14万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【算法】约瑟夫环问题

链表算法篇

博客网站地址: https://arsenova.xyz 我会将优快云上的博客重修一部分迁移到网站上。 文章会做同步更新,但我不会在这个糟糕的平台多待1秒。下面是我要说的话,save your time. keep going 1390

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

约瑟夫环问题 python

约塞夫环问题原理python代码特点 原理 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.) 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一...

。 575

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python 约瑟夫环问题

为什么80%的码农都做不了架构师?>>> ...

weixin_33712881的博客 1505

Java实现约瑟夫环问题

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 /** * @author 16026 * */ import java.util.ArrayList; import java.util.List;

wangzhen的博客 3万+

openjudge 约瑟夫环问题

1:约瑟夫环问题 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 1000kB 描述 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 输入 8 1 3 (n=8 k...

pxlsdz的博客 840
上一篇: 归并排序模板以及求解逆序对模板
下一篇: SDNUOJ 1078 食物链(多种种类并查集)
Konjacer
博客等级 码龄9年 18粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值