报数退出问题

C++Vector和Queue解决循环报数淘汰问题 100人围成一个圈,每人有一个编码,编码从1到100。他们开始从1开始依次报数,报到M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人小于M。输出剩下的人原先的号码,M=3时为:58,91,M=4时为34,45,97. 阅读详情

问题
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

分析:
看到这道题的时候我不由自主的想到了约瑟夫环,想到了用链表去解决,但是,细想之下,时间仓促,因为是在答题,用链表的话有点小题大作,那么便有了下面数组的解决方法!

首先,有N个人,创建一个大小为N的数组,但是如果N是从键盘接收的值,那么就得提前给定一个大小合适的值,这也是用数组解决这个问题的弊端,然后数组中是我们对n个人的编号,从1-n;

从下标为0编号为1的数组元素开始报数,count统计报数,当count==3时,就代表这个人要推出了;那么把他的编号置为0,因为编号的时候是从1开始的,没有0,所以我们以编号为0代表退出;

写到这里,我们又不得不回头去考虑count计数的限制条件,因为有了编号为0的元素,所以只有编号不为0时,count才++;

当然,写到这里,你又会面临两个很尴尬的问题:
其一是,循环的数组下标i应该小于n,当遍历到数组小标为n - 1元素时,怎么回去,毕竟约瑟夫环是一个环,很简单,只要让循环下标 i=0 不就又回去了,是不是很机智;
其二是,这个循环的遍历什么时候停止,
这就有好几种方法了,指针,设置标志都可以,我这里采用计数的方式,因为题目要求最后只留一个人,那么,每当count == 3时,就有一个人退出,这是我么让退出计数m++,当m == n-1时,不就只剩了一个人了;

那么问题就解决了;下面是代码的实现,这是很有意思的一道题;

图解
这里写图片描述

代码

#includ
一篇文章将三极管讲透:三极管从原理到应用,从参数到特性,从入门到精通 晶体三极管(Transistor)是一种半导体电子器件,也是电子工程中最基本的元件之一。它有三个区域,分别是P型半导体,N型半导体和P型半导体,从而形成PNP型晶体三极管或者NPN型晶体三极管。 阅读详情

相关推荐

全球气候模式降尺度方法总结及其代码实现

简介总结各类型气候模式降尺度方法

WW、forever的博客 1万+

报数(约瑟夫环问题)

pintia上的报数题,C语言入门问题,这里是利用剔除法作为算法的解法

约瑟夫问题c++程序,含注释

通过定义一个容器vector<bool>,实现约瑟夫问题(n个人围坐一圈,从1开始顺序编号;游戏开始,从1-m循环报数,报到m的人退出圈外,求最后留下人的序号。)

计蒜客习题:报数

问题描述 有 n 个小朋友做游戏,他们的编号分别是1,2,3…n。他们按照编号从小到大依次顺时针围成一个圆圈,从第一个小朋友开始从1 报数,依次按照顺时针方向报数(加一),报 m 的人会离开队伍,然后下一个小朋友会继续从 1 开始报数,直到只剩一个小朋友为止。 输入格式 第一行输入俩个整数,n,m。(1≤n,m≤1000) 输出格式 输出最后一个小朋友的编号,占一行。 样例输入...

LiuKairui的博客 2061

123报数,遇到3退出问题 C++实现

123报数问题 C++实现 题目: 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出 圈子,问最后留下的是原来第几号的那位。 代码: #include <bits/stdc++.h> using namespace std; int main(){ int N; cout << "请输入人数:"; cin >> N; int a[N] = {0}; // 将数组全部赋值为1,退出时为0 fo

钟DiuDiu的博客 2080

C:n人站成一圈,报数到m的人离开队伍,求最后剩下的是第几人

//n人站成一圈,报数到m的人离开队伍,求最后剩下的是第几人 int lastOne(int n,int m) { if (m>n||n<=0||m<=0) { printf("Range wrong\n"); exit(EXIT_FAILURE); } int arr[n]; //数组长度为n,值全为1,存放n个人

缄默的专栏 638

关于报数退出问题

要求:输入人数,然后输出号数。 观察:可以通过数组,当输入人数的时候,就定义一个长度相同的数组,在这个数组中,每个位数都已经有了编号。 因为每一位都要报数,则当一个位数的人报到下一位的时候还是他本人的话,则可以表示已经没人人了,可以再直接输出号数了。 循环则在这个数组中不断循环。当循环到第三位的时候,则将这个数组的索引记下来,并将其设为0,如果是没有读取过3的话,则索引...

So_Band的博客 553

c1047: [编程入门]报数问题[报3退出]

有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。 输入 初始人数n 输出 最后一人的初始编号 样例输入复制 3 样例输出复制 2 思路:约瑟夫环问题,需要考虑:1.成环(即当遍历到最后一个时,让他下一个为初始) 2.标记问题,代表退出 ...

weixin_51552058的博客 2402

约瑟夫环问题:有n个人围成一圈,顺序编号。从第1个人开始报数(从1-3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?

有n个人围成一圈,顺序编号。从第1个人开始报数(从1-3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位? java代码如下: int n = 10;//n的取值 int num = n;//记录剩余数个数 int arr[] = new int[n];//标记剩余数的位置 0 代表存活,初始全部存活 1 代表删除 int flag = 0; //标记报名,到三降0 int...

fz13768884254的博客 2万+

围圈小朋友报数退出问题

新手上路 ,qiu指教 原问题:12个小朋友手拉手站成一个圆圈,从第一个小朋友开始报数,报到6的那个小朋友退出到圈外,然后他的下一位重新报“1”。 这样继续下去,最后只剩下一个小朋友,他原来站在什么位置上呢?  并输出小朋友退出圈外的顺序。

画心 3878

C语言模拟题解析:拉手游戏中的报数退出问题

这是一个经典的约瑟夫环问题变种,常用于算法竞赛和编程练习。n个人围成一圈,从第一个人开始报数,每当数到3时就淘汰当前人,直到所有人都被淘汰。需要计算特定位置同学的淘汰顺序。对于这类需要反复测试的算法题,平台的一键运行功能特别实用。比如测试样例输入3 3和3 1时,可以快速对比输出是否符合预期。当count是3的倍数时淘汰当前人,并检查是否为目标位置m。- 直接网页访问就能编写调试代码,不用配置本地环境。- 运行结果实时显示,方便验证各种测试用例。最终结果通过count/3计算淘汰顺序。

MoonbeamFalcon67的博客 425

JAVA:循环删除数字------------游戏中的循环报数退出问题------- 约瑟夫环问题

问题:循环报数游戏,有n个人,每一个人编号从1开始,依次编号到n.从1到3报数,报3的退出游戏,得出最后获胜人的编号。 问题分析:1.“循环”问题的处理         取余操作                   2.报3的退出                                   a.表示退出          需要一个数来表示该编号的人不能再参与游戏,这里我用的是-1表示...

颠沛的小丸子 1019

猴子选大王问题(要从n只猴子中选出一位大王。它们决定使用下面的方法: n只猴子围成一圈,从1到n顺序编号。从第q只猴子开始,从1到m报数,凡报到m的猴子退出竞选,下一次又从退出的那只猴子的下一只开始)

问题描述】要从n只猴子中选出一位大王。它们决定使用下面的方法: n只猴子围成一圈,从1到n顺序编号。从第q只猴子开始,从1到m报数,凡报到m的猴子退出竞选,下一次又从退出的那只猴子的下一只开始从1到m报数,直至剩下的最后一只为大王。请问最后哪只猴子被选为大王。 【输入形式】控制台输入三个整数n,m,q。 【输出形式】输出最后选为大王的猴子编号。 【样例输入】 7 4 3 【样例输出】 4 【样例说明】输入整数n = 7,m = 4,q = 3,输出4 #include<stdio.h> #

Leuchten的博客 8352

约瑟夫问题的解决(有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.)

有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位?#include &lt;stdio.h&gt; #define MAX 1000 int main() { int a[MAX]; int n, i, out = 0, num, j = 0; printf("Enter the number of people:");...

wxx258369的博客 3974

循环报数java代码_JAVA:循环删除数字------------游戏中的循环报数退出问题------- 约瑟夫环问题...

问题:循环报数游戏,有n个人,每一个人编号从1开始,依次编号到n.从1到3报数,报3的退出游戏,得出最后获胜人的编号。问题分析:1.“循环”问题的处理 取余操作2.报3的退出a.表示退出 需要一个数来表示该编号的人不能再参与游戏,这里我用的是-1表示b.报3的人 需要一个变量,这里用count,当count==3时,将该编号赋值为-13.表示...

weixin_32126555的博客 273

约瑟夫问题:有n个人围成一圈,顺序报数(1~3),报到3退出

【描述】 有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。 【C语言】 #include int main() { int num[50]; int *p; int i, k, m, n; scanf("%d", &n); p = num; for (i = 0; i < n; i++) *(p + i

SO WHAT? 2199

C语言_报数问题:有n个人围成一圈,顺序从零排号。从第一个人开始报数(从1到3报数),凡报到3的人 退出圈子,问最后留下的是原来第几号的那位。

通过冒泡排序调整位置,让我们不需要的数调到后面,需要的数往前挪。

weixin_49084886的博客 1357

约瑟夫问题:编号为1到100的一百个人围成一圈,以123123的方式进行报数,数到3的人自动退出圈子,剩下的人继续报数,问最后剩下的人编号为几?

c语言实现,代码如下,通俗易懂。

qq_63385279的博客 332

n个人报数退出问题,数到m退出,最后剩下的是几号

#include "stdafx.h" #include "iostream" using namespace std; int last_people(int n,int m) { int *p = new int[n]; for (int i = 0;i < n; i ++)//编号// *(p+i) = i + 1; int k = 0,out_of_line = 0; int

dgxwrj 1136

无人机飞鸟检测数据集VOC+YOLO格式6647张2类别.7z

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):6647标注数量(xml文件个数):6647标注数量(txt文件个数):6647标注类别数:2标注类别名称:["Bird","Drone"]每个类别标注的框数:Bird 框数 = 3567Drone 框数 = 4290总框数:7857使用标注工具:labelImg标注规则:对类别进行画矩形框重要说明:暂无特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注更多信息:https://blog.csdn.net/FL1623863129/article/details/142333919

上一篇: 数据结构之红黑树
下一篇: git向github推送小白教程
John__xs
博客等级 码龄11年 499粉丝 112原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值