王道机试C++第 5 章 数据结构二:队列queue和21年蓝桥杯省赛选择题Day32

目录

5.2 队列

1.STL-queue

课上演示:

基本代码展示:

2. 队列的应用

例:约瑟夫问题 No. 2

题目描述:

思路提示:

代码展示:

例:猫狗收容所

题目描述:

代码表示:

蓝桥杯21年填空题

试题 A :空间

【问题描述】

【答案提交】

试题 B :卡片

【问题描述】

【答案提交】

试题 C :直线

【问题描述】

【答案提交】

试题 D :货物摆放

【问题描述】

【答案提交】


5.2 队列

队列( Queue )是一种线性的序列结构,其存放的元素按照线性的逻辑次序排列,但与一般的线性序列结构如数组或向量相比,队列的操作只限于逻辑上的两端,即新元素只能从队列
一端插入,并且只能从另一端删除已有的元素。
允许队列插入的一端称为队列的尾部,允许队列删除的一端称为队列的头部。因此,对于元素说,插入与删除就分别称为入队和出队。
遵守所谓的先进先出 First-In First-Out, FIFO )规则,即越早入队的元素将会越早出队,而越晚入队的元素将会越晚出队。

1STL-queue

在正式介绍队列的应用之前,先介绍标准库中的队列模板。对于队列模板,读者不必过多
地关注其实现细节,掌握其在程序中的用法即可。
1 queue 的定义
要使用 queue 标准模板,就应在代码中添加头文件,其格式为 #include <queue> 。定义一个队列 queue 的写法是 queue<typename> name ,其中 typename 是队列元素的类型,它可以是任意数据类型,name 是所定义队列的名字。
2 queue 的状态
queue 中常用作判断的状态有两个:一个是返回当前队列是否为空的 empty() ,另一个是返回当前队列元素个数的 size()
3 queue 元素的添加或删除
定义一个队列后,如果要向其中添加新的元素push()删除已有的元素 pop()
4 queue 元素的访问
只能对队列的头尾两端进行操作,获得头front()  尾back()。
课上演示:
基本代码展示:
#include <bits/stdc++.h>
using namespace std;int main() {  queue<int> myQueue; // 定义并初始化一个整型队列  // 输出队列初始大小  printf("the size of myQueue: %zu\n", myQueue.size());  for (int i = 0; i < 10; ++i) {  myQueue.push(i); // 将元素推入队列  }  // 输出队列的前端和后端元素  printf("the front of myQueue: %d\n", myQueue.front());  printf("the back of myQueue: %d\n", myQueue.back());  // 输出队列当前大小  printf("the size of myQueue: %zu\n", myQueue.size());  int sum = 0;  while (!myQueue.empty()) {  sum += myQueue.front(); // 累加队列前端元素  myQueue.pop(); // 弹出队列前端元素  }  // 输出累加和  printf("sum: %d\n", sum);  //再次检查是否为空  if (myQueue.empty()) {  printf("myQueue is empty\n");  }  // 输出队列最终大小(应该是0)  printf("the size of myQueue: %zu\n", myQueue.size());  return 0;  
}

2. 队列的应用

例:约瑟夫问题 No. 2
题目描述:
n 个小孩围坐成一圈,并按顺时针编号为 1, 2,... , n ,从编号为 p 的小孩顺时针依次报数,由 1
m ,报到 m 时,这名小孩从圈中出去;然后下一名小孩再从 1 报数,报到 m 时再出去。以此
类推,直到所有小孩都从圈中出去。请按出去的先后顺序输出小孩的编号。
输入: 第一个是 n ,第二个是 p ,第三个是 m 0 < m , n < 300 )。
           最后一行是:0 0 0
输出: 按出圈的顺序输出编号,编号之间以逗号间隔。
样例输入:
8 3 4
0 0 0
样例输出:
6,2,7,4,3,5,1,8
思路提示:

代码展示:
#include <bits/stdc++.h>
using namespace std;int main() {  int n,p,m;while(true){scanf("%d%d%d",&n,&p,&m);if(n==0&&p==0&&m==0){break;}//1、排队 //队列中的元素是孩子的编号 queue<int>children;
//把第一轮要喊编号的孩子排好队 
//i遍历孩子的编号,j记录已经遍历的孩子数量 for(int i=p,j=0;j<n;++j){children.push(i);++i;//p ->p+1 ->p+2 ->..n ->1 ->...->p-1if(i>n){i=1;}}}//2、喊号过程 int num=1;//将要喊的号while(true){int cur=children.front();//cur是队首孩子的编号children.pop();if(num==m){//检查刚才喊得号是不是1 num=1;//下一个就是1//喊号的同学不需要归队if(children.empty()){printf("%d\n",cur);break;}else{//还有同学在喊号printf("%d",cur);}}	} else{//喊得号码不是m,归队num=num+1; children.push(cur); }return 0;  
}

例:猫狗收容所
题目描述:
有家动物收容所只收留猫和狗,但有特殊的收养规则。收养人有两种收养方式:
第一种为直接收养所有动物中最早进入收容所的。
第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。给定一个操作序列代表所有事件。
若第一个元素为 1 ,则代表有动物进入收容所。第二个元素为动物的编号,正数代表狗,负数代表猫。
若第一个元素为 2 ,则代表有人收养动物。第二个元素若为 0 ,则采取第一种收养方式;若为 1, 则指定收养狗;若为-1 ,则指定收养猫。请按顺序输出收养动物的序列。
若出现不合法的操作,即没有可以符合领养要求的动物,则将这次领养操作忽略。
输入: 第一个是 n ,它代表操作序列的次数。接下来是 n 行,每行有两个值 m t ,分别代表题目中操作的两个元素。
输出:按顺序输出收养动物的序列,编号之间以空格间隔。
样例输入:
6
1 1
1 -1
2 0
1 2
2 -1
2 1
样例输出:
1 -1 2
代码表示:
#include <bits/stdc++.h>
using namespace std;// 定义动物结构体  
struct animal {  int num; // 动物编号  int seq;  // 次序标志  animal(int n, int o) : number(n), order(o) {} // 构造函数  
};  int main() {  queue<animal> catque; // 猫的队列  queue<animal> dogque; // 狗的队列  int n;  int seq = 0;  scanf("%d",&n); // 输入动物数量  for (int i = 0; i < n; ++i) {  int method, pare;  scanf("%d%d",&method,&pare)// 输入操作方法和动物类型  if (method == 1) {  // 入队操作  if (pare > 0) { //操作狗animal dog;dog.num=para;dog.seq=seq; ++seq;dogque.push(dog);} else { animal cat;cat.num=para;cat.seq=seq; ++seq;catque.push(dog); }  } else {  // 出队操作  if (pare == 0 && !dogque.empty() && !catque.empty()) {  // 猫和狗都不为空,比较次序出队  if (dogque.front().pare < catque.front().pare) {  cout << dogque.front().number << " ";  dogque.pop();  } else {  cout << catque.front().number << " ";  catque.pop();  }  } else if (pare == 0 && dogque.empty() && !catque.empty()) {  // 狗为空,只有猫,出队猫  cout << catque.front().num << " ";  cats.pop();  } else if (pare== 0 && !dogque.empty() && catque.empty()) {  // 猫为空,只有狗,出队狗  cout << dogque.front().num << " ";  dogs.pop();  } else if (pare == 1 && !dogque.empty()) {  // 只出队狗  cout << dogque.front().num<< " ";  dogs.pop();  } else if (pare== -1 && !catque.empty()) {  // 只出队猫  cout << catque.front().num<< " ";  catque.pop();  }  }  }  cout << endl; // 输出换行符  return 0;  
}

蓝桥杯21年填空题

试题 A :空间

【问题描述】

小蓝准备用256MB 的内存空间开一个数组,数组的每个元素都是 32 位二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问256MB 的空间可以存储多少个32 位二进制整数?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答:相当于一道计组的题2^28/2^2,再用pow(2,26);

6.71089e+007


试题 B :卡片

【问题描述】

小蓝有很多数字卡片,每张卡片上都是数字 0 到 9 。

小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。小蓝想知道自己能从 1 拼到多少。

例如,当小蓝有 30张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10 ,但是拼 11 时卡片 1 已经只有一张了,不够拼出 11 。

现在小蓝手里有 0 到 9 的卡片各 2021 张,共20210 张,请问小蓝可以从 1 拼到多少?

提示:建议使用计算机编程解决问题。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

3181(短代码+word不容易呀,菜就得练┭┮﹏┭┮)

代码:

#include <bits/stdc++.h>
using namespace std;int card[10];  
bool check(int num)
{while (num){int a = num % 10;if (a == 1)if (card[1] == 0)return false;elsecard[1]--;num = num / 10;}return true;
}
int main()
{for (int i = 0; i <= 9; i++){card[i] = 2021;}for (int i = 1;check(i); i++){cout << i << endl;}return 0;
}

试题 C :直线

【问题描述】

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

目前还不会!!之后搞懂!


试题 D :货物摆放

【问题描述】

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

代码部分

#include <bits/stdc++.h>
using namespace std;int main()
{long long num=2021041820210418;vector<long long> divisor;for(long long i=1;i<=sqrt(num);i++){if(num%i==0){divisor.push_back(i);long long j=num/i;//避免将重复的因子添加到divisor向量中if(j!=i){divisor.push_back(j);//如果是因子就将因子压入因子容器里}}}int count=0;//设置好题解是count初值为0
//设置三个迭代器遍历因子容器找三个因子相乘就是num的组合,答案就在这些组合里面vector<long long>::iterator a,b,c;for(a=divisor.begin();a!=divisor.end();a++){for(b=divisor.begin();b!=divisor.end();b++){for(c=divisor.begin();c!=divisor.end();c++){if((*a)*(*b)*(*c)==num){count++;}}}}cout<<count<<endl;return 0;}

心得体会:

int main()
{
   long long num=2021041820210418;
   vector<long long> divisor;
   for(long long i=1;i<=sqrt(num);i++){
     if(num%i==0){
       divisor.push_back(i);
       long long j=num/i;
       if(j!=i){
         divisor.push_back(j);//如果是因子就将因子压入因子容器里
       }
     }
   }

对于这段代码是用于计算给定的数num的因子。

首先,使用一个for循环来遍历从1到num的平方根之间的整数,即i * i <= num。这是因为一个数的因子不会超过它的平方根。

在循环中,通过判断num是否能被i整除来确定i是否是num的因子。如果num能被i整除,即num % i == 0,则将i添加到因子容器divisor中。

接下来,使用变量j存储num除以i的结果,即j = num / i。然后,通过判断j是否等于i,来避免将重复的因子添加到divisor中。如果j不等于i,则将j也添加到divisor中。

经过循环遍历后,divisor中存储了num的所有因子,这段代码的目的是为了生成一个包含num所有因子的容器divisor,以便后续的处理和计算。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯-List集合

目录 List集合实例化 List集合实例化步骤 常用方法 ArrayList方法 1&#xff1a;add(Object element) 2&#xff1a;size() 3&#xff1a;get(int index) 4&#xff1a;isEmpty() 5:contains(Object o) 6&#xff1a;remove(int index) 总结ArrayList list集合的特点…

Web服务器需要警惕的一些安全隐患

Web服务器需要警惕的一些安全隐患有哪些&#xff0c;今天德迅云安全就带您来了解下。熟悉了解了就知道怎么规避风险。不过无论是什么漏洞&#xff0c;都体现着安全是一个整体的真理&#xff0c;考虑Web服务器的安全性&#xff0c;必须要考虑到与之相配合的操作系统。 1.物理路径…

应用方案 | DCDC电源管理芯片MC34063A

DCDC电源管理芯片 MC34063A MC34063A 为一单片 DC-DC 变换集成电路&#xff0c;内含温度补偿的参考电压源&#xff08;1.25V&#xff09;、比较器、能有效限制电流及控制工作周期的振荡器&#xff0c;驱动器及大电流输出开关管等。外配少量元件&#xff0c;就能组成升压、…

Redis缓存、缓存穿透、缓存雪崩、缓存击穿

1.认识Redis缓存 先来认识一下缓存&#xff0c;再了解redis用作缓存时的作用和问题&#xff0c;以及如何解决redis缓存在的问题。 1.1.什么是缓存 1.2.缓存的优缺点(作用和成本) 2.redis缓存的作用 正常客户端请求服务器&#xff0c;服务器会直接访问数据库&#xff0c;这有…

Selenium自动化测试细节讲解

与以前瀑布式开发模式不同&#xff0c;现在软件测试人员具有使用自动化工具执行测试用例套件的优势&#xff0c;而以前&#xff0c;测试人员习惯于通过测试脚本执行来完成测试。 但自动化测试的目的不是完全摆脱手动测试&#xff0c;而是最大程度地减少手动运行的测试。自动化…

R语言系列2——R语言数据处理技巧

目录 写在开头1. 数据导入与导出1.1 基础操作详解1.1.1 导入数据1.1.2 导出数据 1.2 高级技巧详解1.2.1 自定义导入1.2.2 自定义导出 1.3 常见问题 2. 数据清洗基础2.1 缺失值处理2.1.1 删除含缺失值的行或列2.1.2 填充缺失值2.1.3 预测模型填充2.1.4 使用特定值填充 2.2 数据类…

【智能家居】东胜物联ODM定制ZigBee网关,助力能源管理解决方案商,提升市场占有率

背景 本文案例服务的客户是专业从事智能家居能源管理的解决方案商&#xff0c;其产品与服务旨在帮助用户监测、管理和优化能源消耗&#xff0c;以提高能源使用效率。 随着公司的扩张&#xff0c;为了增加市场占有率&#xff0c;他们希望找到更好的硬件服务支持&#xff0c;以…

mysql笔记:7. 索引

文章目录 索引含义和特点索引分类普通索引和唯一索引单列索引和组合索引全文索引空间索引 索引设计原则创建索引直接创建索引在已经存在的表上创建索引 删除索引 在关系数据库中&#xff0c;索引是一种可以加快数据检索速度的数据结构&#xff0c;主要用于提高数据库查询数据的…

人工智能指出数学教育问题

国内的数学教育长期以来都以其注重的计算能力而著称。从小学开始&#xff0c;学生们就接受严格的算术训练&#xff0c;九九乘法口诀表几乎成为了每个人的必修课。然而&#xff0c;尽管中国在数学方面的成绩屡获佳绩&#xff0c;但是锻炼的都是很容易被计算器或者计算机取代的能…

零基础学习JS--基础篇--使用类

JavaScript 是一个基于原型的语言——一个对象的行为取决于它自身的属性及其原型的属性。 在 JavaScript 中&#xff0c;类可以看作是已有的原型继承机制的一种抽象——所有语法都可以转换为原型继承。类本身也是不过是 JavaScript 里一种普通的值&#xff0c;它们有其自己的原…

JavaScript 技术100问?

JavaScript 是一种高级的、解释型的编程语言&#xff0c;通常用于为网页添加交互性和动态功能。作为 Web 开发中最重要的技术之一&#xff0c;JavaScript 在前端开发中扮演着重要角色。它可以直接嵌入到 HTML 中&#xff0c;并通过浏览器解释执行。JavaScript 的语法类似于 Jav…

2.Linux文件IO基础

Linux 文件 I/O&#xff08;Input/Output&#xff09;基础是 Linux 应用程序开发中的重要组成部分。在 Linux 系统中&#xff0c;文件 I/O 涉及到文件的读取和写入&#xff0c;以及文件描述符、系统调用等概念。以下是 Linux 文件 I/O 的基础知识&#xff1a; 1. 文件描述符 …

GEE Rgee——使用 eemont 和 geemap来进行Landsat 8数据的反演NDSI

简介 用 rgee 在 R 中使用 eemont 和 geemap来快速进行NDSI反演。 Landsat 8是一颗运行于太阳同步轨道上的遥感卫星,可以获取高分辨率的光学遥感数据,其中包括多光谱和热红外波段。NDSI(Normalized Difference Snow Index)是一种用于检测和分析雪被覆盖情况的指数。本文将…

算法刷题day25:多路归并

目录 引言概念一、鱼塘钓鱼二、技能升级三、序列 引言 关于这个多路并归蓝桥杯考的不是很多&#xff0c;如果要出的话&#xff0c;可能模型都会差不多&#xff0c;因为不会出太难的题&#xff0c;难题基本上都是贪心、DP之类的&#xff0c;所以好好刷题刷熟练就行了&#xff0…

ms office学习记录10:Excel㈣

自动填充时也可输入前几个值&#xff0c;选中单元格双击右下角黑色箭头进行填充 将填充样本行列粘贴至原列后要注意删除样本行列内容 排序与筛选 “数据”选项卡中的“排序”与“开始”选项卡中的“排序和筛选”实质相同 排序依据&#xff1a;数值内容和数值格式 “选项”…

最大的单入口空闲区域

最大的单入口空闲区域 问题描述输入输出代码实现 问题描述 找到最大的单入口空闲区域。 空闲区域是由连通的’O’组成的区域&#xff0c;位于边界的’O’可以是入口&#xff0c; 单入口空闲区域即有且只有一个位于边界的’O’作为入口的由连通的’O’组成的区域。 如果两个元素…

Docker使用之Docker Compose【入门篇】

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它允许用户通过一个单一的文件来定义多个容器&#xff0c;然后使用一个命令来启动、停止和管理这些容器。在本文中&#xff0c;我们将详细介绍如何使用Docker Compose进行多容器管理&#xff0c;并提供一个范例…

大数据开发(Spark面试真题-卷六)

大数据开发&#xff08;Spark面试真题&#xff09; 1、Spark HashPartitioner和RangePartitioner的实现&#xff1f;2、Spark DAGScheduler、TaskScheduler、SchedulerBackend实现原理&#xff1f;3、介绍下Sparkclient提交application后&#xff0c;接下来的流程&#xff1f;4…

查找C++中所有代码行数超过100的类成员函数

执行效果 python3 find_large_functions.py ./stage_test.cpp: StageTest::process has 106 lines. ./stage_test.cpp: StageTest::do_test_ has 172 lines.实现方法 在检测到函数开始的“可能”标志后&#xff08;比如返回类型和作用域运算符::&#xff09;&#xff0c;开始…

Vue-router

router的使用&#xff08;52&#xff09; 5个基础步骤&#xff1a; 1.在终端执行yarn add vue-router3.6.5&#xff0c;安装router插件 yarn add vue-router3.6.5 2.在文件的main.js中引入router插件 import VueRouter from vue-router 3.在main.js中安装注册Vue.use(Vue…