算法学习001-圆桌问题 中小学算法思维学习 信奥算法解析 c++实现

目录

算法学习001-圆桌问题

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、程序说明

五、运行结果

六、考点分析

七、推荐资料


算法学习001-圆桌问题

一、题目要求

1、编程实现

圆桌边围坐着2n个人,其中n个人是好人,另外n个人是坏人。从第一个人开始数,数到第m个人,立即赶走该人;然后从被赶走的人之后开始数,再将数到的第m个人赶走,依此方法不断赶走围坐在圆桌边的人

预先应该如何安排这些好人与坏人的座位,才能使得在赶走n个人之后圆桌边围坐的剩余的n个人全是好人

2、输入输出

输入描述:多组数据,每组数据输入:n,m <= 32767

输出描述:对于每一组数据,输出2n个大写字母,G是好人,B是坏人,50个字母为一行,不允许出现空白字符,相邻数据间留有一个空行

输入样例:

2 3

2 4

输出样例:

GBBG

BGGB

二、算法分析

  1. 本题的解题思路有多种
  2. 这里使用动态数组的方式实现
  3. 首先实现一个2n的动态数组并进行编号
  4. 接着依次赶走n个坏人,要注意是圆桌所以需要赶走的坏人要考虑循环处理
  5. 然后再次对2n个编号进行遍历,和动态数组中留下来的编号一致的就是好人
  6. 否则就是坏人,按要求输出对应字母即可

三、程序编写

#include<bits/stdc++.h>
using namespace std;
int main()
{
	vector <int> table;
	int n,m;
	while(cin >> n >> m)
	{
		table.clear();
		for(int i=0;i<2*n;i++) table.push_back(i); 	//初始化
		int pos = 0;								//记录当前位置
		for(int i=0;i<n;i++)						//赶走的n个人
		{
			pos = (pos+m-1) % table.size();			//圆桌是一个环 取余处理
			table.erase(table.begin() + pos);		//赶走一个坏人 table人数减1
		}
		int j = 0;
		for(int i=0;i<2*n;i++)						//打印字母
		{
			if(!(i%50) && i) cout << endl;			//50个一行
			if(j < table.size() && i == table[j])	//留下的都是好人
			{
				j++;
				cout << 'G';
			}
			else
				cout << 'B';
		}
		cout << endl << endl;		
	}
	return 0;
}

四、程序说明

  1. 程序首先声明了一个vector<int>类型的table变量,用来存储圆桌上的人
  2. 然后在一个循环中读取输入的n和m
  3. 每次循环都会先清空table,然后通过for循环将2*n个人的编号依次加入到table中
  4. 接下来,声明一个变量pos用来记录当前位置,初始值为0
  5. 然后使用一个for循环从0到n-1,每次循环都会更新pos的值为(pos+m-1) % table.size(),这一步相当于将pos向后移动m个位置
  6. 接着,使用table.erase(table.begin() + pos)函数将table中的第pos个人删除,相当于赶走了一个坏人
  7. 最后,通过table.size()来获取table中剩余的人数,并将table中的人与循环变量i对比,如果相等则表示该人是好人,打印字符'G',否则打印字符'B'。
  8. 并且每打印50个字符会换行。 程序最后两个endl是为了输出格式的美观。
  9. 最后返回0,程序结束

 本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102

五、运行结果

7
You are too young!

六、考点分析

难度级别:容易,这题相对而言还是比较简单的,具体主要考查如下:

  1. 充分掌握变量的定义和使用
  2. 学会输入流对象cin的使用,从键盘读入相应的数据
  3. 学会动态数组vector的使用
  4. 学会for循环的使用,在确定循环次数的时候推荐使用学会
  5. 学会while循环的使用,在不确定循环次数的时候推荐使用
  6. 学会if条件判断语句的使用,满足一定条件才能执行后面的语句
  7. 学会if...else...双分支语句的使用,条件满足执行一种处理,不满足执行另一种处理
  8. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  9. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  10. 充分掌握变量定义和使用、分支语句、循环语句和简单算法知识的使用及输入输出的用法

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

七、推荐资料

  • 所有考级比赛学习相关资料合集【推荐收藏】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/571838.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【199.二叉树的右视图】_二叉树_day01

1 题目描述 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。199.二叉树的右视图 2 解题思路 此题是二叉树层序遍历的拓展。 创建一个队列que (Queue)起到中介的作用&#xff0c…

Atom-7B-Chat本地推理

Atom-7B-Chat 本地推理 基础环境信息&#xff08;wsl2安装Ubuntu22.04 miniconda&#xff09; 使用miniconda搭建环境 (base) :~$ conda create --name Llama-Chinese python3.10 Retrieving notices: ...working... done Channels:- defaults Platform: linux-64 Collectin…

RealSenseSR300工程环境配置说明

新建目录结构如下&#xff1a; output:存储可执行文件.exe等src:存储源码.cpp .h等3rdparty:存储第三方库 opencv等 其中将源码按照main及其相关文件分为以下三类 vs2015许可证到期后先激活&#xff0c;激活码很多网上有&#xff0c;如&#xff1a;HMGNV-WCYXV-X7G9W-YCX63…

企业微信hook接口协议,根据手机号搜索联系人

根据手机号搜索联系人 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","phoneNumber":"1357xxxx" } 返回示例 {"data&q…

【SQL代理中转注入】对DVWA登录界面username字段实施注入

一、实验过程 步骤0&#xff1a;注释掉相关username防护&#xff0c;截图如下&#xff1a; 以DVWA为攻击目标&#xff0c;将login.php中第21、22行注释掉 步骤1&#xff1a;源码分析&#xff0c;截图如下&#xff1a; 如此可知&#xff0c;首先需要通过token验证&#xff0c;然…

Matlab|含多微网租赁共享储能的配电网博弈优化调度

目录 主要内容 结果一览 下载链接 主要内容 首先利用NSGA-II算法求解三个微网的最优充放电策略并做为已知条件代入到双层调度模型中&#xff1b;然后求解双层模型&#xff0c;上层为主动配电网调度模型&#xff0c;下层包括共享储能优化模型和多微网优化调度模型&a…

【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ①

在android系统中fence用于不同模块需要访问同一块buffer的同步&#xff0c;例如camera和graphic。对于preview buffer, camera是生产者graphic是消费者。 camera需要生产图像数据到preview buffer时需要等待preview buffer的 fence可用。 camera sync是高通camx框架里面用于各个…

SpringBoot学习之Redis下载安装启动【Windows版本】(三十六)

一、下载Redis for Windows Redis 官方网站没有提供 Windows 版的安装包,但可以通过 GitHub 来下载安装包,下载地址:https://github.com/tporadowski/redis/releases 1、网站提供了安装包和免安装版本,这里我们直接选择下面的免安装版本 2、下载后的压缩包解压以后,如下…

idm序列号永久激活码2023免费可用 IDM软件破解版下载 最新版Internet Download Manager 网络下载加速必备神器 IDM设置中文

IDM是一款多线程下载工具&#xff0c;全称Internet Download Manager。IDM的多线程加速功能&#xff0c;能够充分利用宽带&#xff0c;所以下载速度会比较快&#xff0c;而且它支持断点续传。它的网站音视频捕获、站点抓取、静默下载等功能&#xff0c;也特别实用。 idm使用技…

MyBatisPlus分页查询的使用

一、导入依赖 <!-- MyBatis-plus的依赖 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4</version> </dependency><!-- mysql的依赖 --> &l…

C# Solidworks二次开发:枚举应用实战(第三讲)

大家好&#xff0c;今天继续介绍枚举相关内容。 下面是今天要介绍的枚举&#xff1a; &#xff08;1&#xff09;第一个为swACisOutputVersion&#xff0c;这个枚举为ACIS的版本&#xff0c;下面是官方的具体解释&#xff1a; 其枚举值为&#xff1a; MemberDescriptionswAc…

JVM支持的可配置参数查看和分类

JVM参数大致可以分为三类: 标注指令:-开头。 这些是所有的HotSpot都支持的参数。可以用java-help 打印出来。 非标准指令: -X开头。 这些指令通常是跟特定的HotSpot版本对应的。可以用java -X打印出来。 不稳定参数: -XX 开头。 这一类参数是跟特定HotSpot版本对应的&#x…

【简单介绍下机器学习之sklearn基础】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【注解和反射】获取类运行时结构

继上一篇博客【注解和反射】类加载器-CSDN博客 目录 七、获取类运行时结构 测试 getFields()和getDeclaredFields() getMethods()和getDeclaredMethods() 七、获取类运行时结构 获取类运行时结构通常指的是在Java等面向对象编程语言中&#xff0c;使用反射&#xff08;Ref…

Linux 小技巧1

目录 一. 统计文件的总行数二. 获取从第二行开始的内容三. 合并两个文件为一个文件四. 统计指定列唯一值的数量五. 列出文件的绝对路径六. 获取除了空白行和注释之外的部分 一. 统计文件的总行数 ⏹非压缩文件 统计当前文件夹下csv文件的行数 wc -l ./*.csv统计指定文件夹下…

华为OD机试 - 跳格子3 - 动态规划(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

软件测试之【软件测试概论三】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言测试用例的前因后果测试用例的设计方法黑盒测试用例设计方法&#x1f525…

深度学习基础:循环神经网络中的Dropout

深度学习基础&#xff1a;循环神经网络中的Dropout 在深度学习中&#xff0c;过拟合是一个常见的问题&#xff0c;特别是在循环神经网络&#xff08;RNN&#xff09;等复杂模型中。为了应对过拟合问题&#xff0c;研究者们提出了许多方法&#xff0c;其中一种被广泛应用的方法…

vue cli3开发自己的插件发布到npm

具体流程如下&#xff1a; 1、创建一个vue项目 vue create project 2、编写组件 &#xff08;1&#xff09;新建一个plugins文件夹&#xff08;可自行创建&#xff09; &#xff08;2&#xff09;新建Button组件 &#xff08;3&#xff09;组件挂载&#xff0c;为组件提供 in…

VMWare里Centos系统下使用Bonding技术实现两块网卡绑定

一、Bonding技术的好处 bonding(绑定)是一种linux系统下的网卡绑定技术&#xff0c;可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡&#xff0c;实现本地网卡的冗余&#xff0c;带宽扩容和负载均衡。 Bonding技术可以设置七中工作模式&#xff0c;常用的有…