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

2024-04-25 08:52

本文主要是介绍算法学习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';}elsecout << '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:方式方法有多种,小朋友们只要能够达到题目要求即可!

七、推荐资料

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

这篇关于算法学习001-圆桌问题 中小学算法思维学习 信奥算法解析 c++实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934225

相关文章

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Mysql如何解决死锁问题

《Mysql如何解决死锁问题》:本文主要介绍Mysql如何解决死锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录【一】mysql中锁分类和加锁情况【1】按锁的粒度分类全局锁表级锁行级锁【2】按锁的模式分类【二】加锁方式的影响因素【三】Mysql的死锁情况【1

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2