第18 题: 题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数 字)。

刚入职,软件测试岗,有点迷茫不知道下一步怎么提升自己 软件测试前景和发展都是不错,已经入了软件测试这行业就坚挺下去 阅读详情
当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。

求出在这个圆圈中剩下的最后一个数字。


思路:

      把这个题目中的开始数字改下以便下面的说明,n 个数字(1,…,n-1,n)形成一个圆圈,从数字1 开始每次从这个圆圈中删除  第(第说明与开始数字无关)m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数 字)。

     这个是Josephus问题的推广(Josephus问题是m = 3)。

     这个题目出题人的意图应该是采用模拟的方法吧,这种方法网上很多。正好前段时间上了具体数学这门课,下面利用《具体数学》中提到的知识来解决这样的问题。可以参考具体数学第三章第三节。

    下面是对原文的一段摘抄:(Josephus问题是m = 3)

     每当一个人越过,我们就赋予一个新的数。于是,1和2变成了n+1和n+2,则3被执行;4和5变成n+3和n+4,则6被执行;……,3k+1和3k+2变成n+2k+1和n+2k+2,则3k+3被执行;……,则3n被执行(或留下幸存),例如当n=10,数是

          1          2          3          4          5          6          7          8          9          10

         11       12                    13        14                    15        16                     17

          18                               19        20                                 21                    22

                                              23        24                                                          25

                                              26                                                                       27

                                              28

                                             29

                                              30

 数3k最后以消除第k个人而告终。所以如果我们能计算出人数3n的原先的数,则我们能断定谁是幸存者。

    若N>n,人数N一定要有一个以前的数,且我们能找到它。如下:我们有N=n+2k+1或N=n+2k+2,因此k= (int)((N-n-1)/2),以前的数分别是3k+1或3k+2,也就是说,它是3k+(N-n-2k)=k+N-n,因此我们能计算幸存者数J3(n)如下:

    N = 3n;

    while  N>n    do     N:=(int)  ((N-n-1)/2 ) + N -n;

   J3(n)  :=  N.

   利用D = 3n+1-N来替换N,我们可以得到改进的算法:

  D:=1;

  while  D <=  2n    do   D :=  ceil(   3*D/2 );//ceil是c中的取上整函数

   J3(n) :=  3n + 1 -D.

 同样的道理消除第m个人。

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
	double a = 1.0;
	int m = 0,n = 0;

	cin >> m >> n;

	while ( a <= (m-1)*n )
	{
		a = ceil ( m*a/(m-1) );
	}

	cout << (m*n + 1 - (int)a  - 1) << endl;//原文是从0开始,在此基础上-1.
	return 0;
}


     


ArcGIS拓扑面错误批量修改 在工作学习中经常会遇到拓扑修改的问题,当数据量巨大的时候会产生拓扑问题 当拓扑错误数量巨大时,人工逐一修改是不现实的,基于此利用gis自带工具箱实现拓扑面类错误的批量修改。 一、.常见拓扑错误的类型: 1面重叠 2空隙(绿色部分) 二、拓扑检查 1新建数据库-----新建数据集—导入数据. 2新建拓扑 3修改拓扑容差及名称 添加拓扑修改规则 完成拓扑检查-查看拓扑错误 三、拓扑批量... 阅读详情

相关推荐

群晖NAS实战:Python项目部署全流程解析

本文详细解析了在群晖NAS上部署Python项目的完整流程。从开启SSH、选择连接工具,到通过套件中心一键安装Python3、配置pip及国内镜像源,再到上传项目、安装依赖、后台运行及排错,提供了清晰的避坑指南。旨在帮助用户将群晖NAS从存储设备转变为可执行自定义任务的智能服务器,实现自动化脚本、数据监控等应用。

weixin_29057163的博客 593

题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除

题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 package cn.it.demo.linked; import java.util.LinkedList; impor

u014072347的专栏 1053

手把手教你用STM32单片机DIY一个简易PLC(附完整电路图与PCB文件)

本文详细介绍了如何利用STM32单片机DIY一个简易PLC控制器,涵盖硬件设计、电路图解析、PCB布局优化及固件框架实现。通过完整的电路图和PCB文件,帮助读者从元器件选型到工业级优化,逐步构建可靠的PLC系统,特别适合工业自动化爱好者和学习者实践。

weixin_42527160的博客 576

剑指Offer62.圆圈中最后剩下的数字 C++

0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。输入: n = 10, m = 17。输入: n = 5, m = 3。

zzzzyyyyy123456的博客 207

PPT太丑?用InDesign制作电影级的交互式在线演示文档

本文旨在解决传统演示软件(如PowerPoint、Keynote)在制作商业提案、设计报告时,普遍存在的模板化严重、视觉表现力不足、动态效果廉价的核心痛点。我们将介绍一套常被设计师们“误解”或“忽略”的“降维打击”工作流,核心是利用印刷排版软件 Adobe InDesign 强大的版式控制、动画与交互功能,来创建电影级的动态演示文稿,并通过其 在线发布 (Publish Online) 功能,一键生成可在任何浏览器中流畅访问的网页版交互式文档,从而极大地提升提案的专业度与视觉冲击力。

Kingsdesigner的博客 1282

卡门涡街可视化实战:从网格加密策略到动画后处理技巧

本文详细介绍了利用ANSYS Fluent进行卡门涡街可视化模拟的全流程,包括网格加密策略、求解器设置、涡街捕捉及动画后处理技巧。通过计算流体力学(CFD)方法,帮助工程师和研究人员高效模拟圆柱绕流现象,优化工程设计。

weixin_29309785的博客 415

图解LeetCode——剑指 Offer 62. 圆圈中最后剩下的数字

这个数字排成一个圆圈,从数字开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如:这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是,因此最后剩下的数字是3。根据题目描述,我们会得到一个长度为的数组,然后这个数组会首尾相接从而组成一个圆圈。那么我们每次从这个圆圈里删除第m个数字,从而求出最后剩余的那个数字。我们以数组为,为例,具体的执行逻辑此处就不赘述了,请见下图所示即可:那么,如果我们以模拟的方式去执行的话,由于的区间在,

爪哇缪斯的博客 217

终于找到两个稳定好用的Docker镜像加速源,拉取速度提升几十倍!

国内使用Docker经常遇到镜像拉取慢、超时失败的问题🐳 本文分享两个亲测好用的免费镜像加速源⚡ 实测拉取速度从十几分钟缩短到几十秒,稳定性接近100%📊 支持一键配置脚本,支持多平台使用✨

XiaoqiangClub的博客 958

n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字

题目: n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个 数字), 当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。 求出在这个圆圈中剩下的最后一个数字。 该题目是以下题目的变形。 (n 个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子

lvmengmeng 2301

元数据治理实战:构建企业数据地图与血缘体系

元数据(Metadata)是描述数据的数据,是你能了解“数据是怎么来的”、“它是做什么的”、“能不能用”的基础信息。📌 举个例子:order_idstringods_order定义:平台内用户在订单系统中产生的唯一订单编号更新时间:每天凌晨 2 点,由 Airflow 调度任务生成所属人:张三(数据开发部)🔍 这些信息本身不直接参与计算,但它们是数据可管理、可追踪、可评估的基础。模块实战建议元数据类型技术 + 业务 + 操作元数据三类统一治理治理路径。

晴天彩虹雨的博客 291

构建具有预测维护能力的AI Agent

随着工业4.0的推进,工业设备的复杂性和自动化程度不断提高,设备的稳定运行对于企业的生产效率和经济效益至关重要。预测维护作为一种先进的设备维护策略,能够通过对设备状态的实时监测和分析,提前预测设备故障,从而避免设备意外停机,降低维护成本。本文的目的是详细阐述如何构建具有预测维护能力的AI Agent,涵盖从数据采集、处理、模型训练到实际应用的整个流程,为企业和开发者提供全面的技术指导。本文将按照以下结构进行组织:首先介绍核心概念与联系,包括预测维护和AI Agent的基本原理和架构;

2501_92132293的博客 943

n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始

#include using namespace std; int findLastNum(int k,int n) {  int t;  int begin = 0;     int* arr = new int[n];  for(int i = 0;i   arr[i] = i;  int count = 0;  //i = 0;  while(count  {

shaonian7812的专栏 522

【CAD】【手把手带你写一个DXF&JAVA解析框架】02——整理DXF元数据实体类,涵盖重要属性与对照组码

本文系统梳理了DXF文件解析中的核心元数据类,重点分析了Tables段(图层、块记录)、Blocks段和Entities段的关键数据结构。通过详细的组码说明和对照代码实现,阐述了图层定义(DXFLayer)、块记录(DXFBlockRecord)、应用程序标识(DXFAppId)等表对象的属性构成;同时解析了直线(DXFLine)、多段线(DXFLwPolyLine)、圆弧(DXFArc)、文字(DXFText)等实体类的几何特征与属性定义。文章还构建了顶点(Vertex)、基类(DXFEntity、DXF

Wonder ZH 270

第18 题:题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,

第18 题:题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。求出在这个圆圈中剩下的最后一个数字。 使用数组来存储

SunDancer 1950

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

每天学习一算法系列(18)(n 个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m 个数字)

题目: n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个 数字), 当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。 求出在这个圆圈中剩下的最后一个数字。 该题目是以下题目的变形。 (n 个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子,问最后留下

yuucyf的专栏 3554

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,

题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 July:我想,这个题目,不少人已经 见识过了。   这里创建一个链表,单循环,然后逐渐删除! #include struct

游刃有余则成的专栏 1077

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

算法习题18:约瑟夫环(n个数字(0,1,…,n-1)形成一个圆圈)

题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 -------------------------------- 约瑟夫环是一个数学的应用问题:已知n小伙伴(以编号1,2,3...n分别

ylf13的专栏 2842

java删除最后一个数字_18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从...

声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明。谢谢。题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的...

weixin_30025473的博客 395

第18题: 题目:n个数字(0,1,„,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下

#include using namespace std; typedef struct tagNode { tagNode *pNext; int data; }Node; //创建有n个结点的循环链表 Node *CreateLoopList(int n) { Node *head = NULL; Node *tail = NULL; Node *temp = NULL;

FelixTT的专栏 1388

18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。

题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 答案: //20130128#include using namespace std; int lastRemain(i

zhoutong12589的专栏 1187

n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始(18)

第18题: 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。   /* Name: Copyright: Author: Date: 15-06-11 14:1

Allendale的专栏 1315

【微软100题】n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数

package test; /** * 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 * 当一个数字删除后,从被删除数字的下一个继续删除第m个数字 * * 思路:最简单的思想,一步一步按照题目的方法,进行计算 * @author Zealot * */ public cl

Zealot的专栏 1008

18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除...

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4263868.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明。谢谢。 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0...

weixin_33912445的博客 189

求在这个圆圈中剩下的最后一个数字

第18题(数组): 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。 //coder:LEE //20120227 #include #include #include #inc

lihappy999的专栏 655

【编程题目】n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始

第 18 题(数组):题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始,每次从这个圆圈中删除第 m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第 m 个数字。求出在这个圆圈中剩下的最后一个数字。 思路:看到这道题,直觉是不难,模拟一下过程就好了。我用的是数组来表示的,用first表示当前第一个数...

weixin_30292843的博客 168

面试100题:18.求从圈中不停的删除第m个数字之后最后剩下的数字

转载并参考July的博客http://topic.youkuaiyun.com/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html,万分感谢! 题目: n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第

加油,码农! 1000
上一篇: 第15 题: 题目:输入一颗二元查找树,将该树转换为它的镜像,
下一篇: 第19 题: 题目:定义Fibonacci 数列如下: / 0 n=0 f(n)= 1 n=1 \ f(n-1)+f(n-2) n=2
Matrixlibing
博客等级 码龄14年 2粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值