机试准备第12天
首先学习队列,队列有先进先出的特性。广度优先遍历需要基于队列实现,C++中的stl引入了队列的实现方式。队列支持push(),进入队尾,pop()出队,队头出队,front()获取队首元素,back()获取队尾元素,empty()判断队列是否为空。
第一题是约瑟夫环问题。
#include <stdio.h>
#include <queue>
using namespace std;
int main()
{queue<int> myqueue;int n,p,m;while(scanf("%d%d%d", &n,&p,&m)!=EOF){if(n ==0&&p==0&&m==0) break;//生成第一轮报数的队列//p, p+1,p+2,...,n,1,2,....int no = p;//孩子编号for(int i = 0; i < n;i++){myqueue.push(no);no++;if(no>n) no=1;}//开始报数int say = 1;while(1){int cur = myqueue.front();myqueue.pop();if(say == m){say = 1;if(myqueue.empty()){printf("%d\n", cur);break;}else{printf("%d,", cur);}}else {say++;myqueue.push(cur);}}}return 0;
}
第二题是排队打饭,分情况讨论即可,主要注意time是long long类型,使用int这题过不了。
#include <stdio.h>
#include <queue>
using namespace std;
struct Student{int a;//到达时刻int t;//打饭耗时int b;//最大等待时间
};
int main(){queue<Student> que;int n;scanf("%d", &n);for(int i = 0; i<n;i++){int ai,ti,bi;scanf("%d%d%d", &ai, &ti,&bi);Student s1;s1.a = ai;s1.b = bi;s1.t = ti;que.push(s1);//读入学生序列}long long time = 1;//记录当前时刻while(!que.empty()){Student stu = que.front();if(time>(stu.a+stu.b)){printf("-1 ");que.pop();}else if(time>=stu.a&&time<=(stu.a+stu.b)){printf("%d ", time);time += stu.t;que.pop();}else if(time<stu.a){time = stu.a;printf("%lld ", time);time += stu.t;que.pop();}}
}
下面学习栈,后进先出。深度优先遍历、表达式解析、递归会使用栈。stack支持push()入站,pop()出栈,top()获取栈顶元素,栈只支持获取栈顶元素,empty()获取栈是否为空。
第三题是编排字符串。栈的简单应用。
#include <stdio.h>
#include <stack>
#include <string>
using namespace std;
int main(){int n;scanf("%d", &n);stack <string> st1;for(int i = 0; i<n;i++){char mid[20];scanf("%s", mid);string str = mid;st1.push(str);stack<string> mystack;mystack = st1;int num = 1;while(!mystack.empty()){if(num>4) break;string str1 = mystack.top();printf("%d=%s ", num, str1.c_str());num++;mystack.pop();}printf("\n");}}
第四题是括号匹配,经典题目。
#include <stdio.h>
#include <stack>
#include <string>
using namespace std;
int main()
{char arr[20000];scanf("%s", arr);string str = arr;stack<char> mystack;mystack.push(str[0]);for(int i = 1;i < str.size();i++){if(str[i] == '<'||str[i] == '('||str[i] == '{'||str[i] == '['){mystack.push(str[i]);}else if(str[i]=='>'){if(mystack.empty()) {printf("no");return 0;}char res = mystack.top();if(res == '<') mystack.pop();else {printf("no");return 0;}}else if(str[i]==')'){if(mystack.empty()) {printf("no");return 0;}char res = mystack.top();if(res == '(') mystack.pop();else {printf("no");return 0;}}else if(str[i]=='}'){if(mystack.empty()) {printf("no");return 0;}char res = mystack.top();if(res == '{') mystack.pop();else {printf("no");return 0;}}else if(str[i]==']'){if(mystack.empty()) {printf("no");return 0;}char res = mystack.top();if(res == '[') mystack.pop();else {printf("no");return 0;}}}if(mystack.empty()==true) printf("yes");else printf("no");return 0;
}
第五题是堆栈的使用,简单模拟。
#include <stdio.h>
#include <string>
#include <stack>
using namespace std;
int main() {int n;while (scanf("%d", &n) != EOF) {stack <int> mystack;for (int i = 0; i < n; i++) {char op[2];scanf("%s", op);string op2=op;if (op2 == "A") {if (mystack.empty()) printf("E\n");else printf("%d\n", mystack.top());} else if (op2 == "O") {if (!mystack.empty()) mystack.pop();} else if (op2 == "P") {int num;scanf("%d", &num);mystack.push(num);}}}return 0;
}
第六题是计算表达式,写了半天代码逻辑不对,气完了。建立运算符栈与运算数栈。从左向右扫描表达式,遇到操作数就加入操作数栈,扫描到运算符,若运算符栈为空,则直接压入运算符栈,若运算符栈不为空但当前运算符优先级大于栈顶运算符,也执行压栈操作。若运算符栈不为空但当前运算符优先级低于栈顶运算符,则弹出栈内的运算符,同时弹出操作数,直到当前运算符优先级再次大于栈顶运算符,压入栈中。
#include <stdio.h>
#include <string>
#include <stack>
#include <map>
using namespace std;
int main() {char str[1000] = {0};map<char, int> prio = {{'\0', 0}, {'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}};while (scanf("%s", str) != EOF) {string numstr = "";stack <char> opstack;stack <double> numstack;for (int i = 0;; i++) {if (str[i] >= '0' && str[i] <= '9') {numstr.push_back(str[i]);} else {double num = stod(numstr);numstr = "";//数值提取numstack.push(num);//什么时候弹栈?栈非空&&新的op的优先级不高于栈顶的优先级//循环弹栈和计算while (!opstack.empty() && prio[str[i]] <= prio[opstack.top()]) {double right = numstack.top();numstack.pop();double left = numstack.top();numstack.pop();char curop = opstack.top();opstack.pop();if (curop == '+') numstack.push(left + right);else if (curop == '-') numstack.push(left - right);else if (curop == '*') numstack.push(left * right);else if (curop == '/') numstack.push(left / right);}//栈为空或者新运算符的优先级大于栈顶运算符if (str[i] == '\0') {printf("%d\n", (int)numstack.top());break;} else opstack.push(str[i]);}}}return 0;
}
第七题是模拟出入栈。
#include <bits/stdc++.h>
using namespace std;int main() {string s;while (cin >> s) {stack<char> stk;int j = 0; //j用来扫描出栈序列s的for (char i = 'a'; i <= 'z'; ++ i) {stk.push(i); //每次按顺序入栈一个while (stk.size() && stk.top() == s[j]) {j++; //出栈序列向后走匹配下一个stk.pop(); //出栈}}if (stk.empty()) cout << "yes\n"; //栈空了,就是匹配的else cout << "no\n";}return 0;
}
相关文章:
机试准备第12天
首先学习队列,队列有先进先出的特性。广度优先遍历需要基于队列实现,C中的stl引入了队列的实现方式。队列支持push(),进入队尾,pop()出队,队头出队,front()获取队首元素,back()获取队尾元素&…...
计算机二级MS之PPT
声明:跟着大猫和小黑学习随便记下一些笔记供大家参考,二级考试之前将持续更新,希望大家二级都能轻轻松松过啦,过了二级的大神也可以在评论区留言给点建议,感谢大家!! 文章目录 考题难点1cm25px…...
伊藤积分(Ito Integral):随机世界中的积分魔法
伊藤积分(Ito Integral):随机世界中的积分魔法 在研究随机微分方程(SDE)和布朗运动时,伊藤积分(Ito Integral)是一个绕不开的关键概念。它是处理布朗运动随机项 ( d W ( t ) dW(t)…...
【Deepseek应用】Zotero+Deepseek 阅读和分析文献(下)
【Deepseek应用】Deepseek R1 本地部署(OllamaDockerOpenWebUI) 【Deepseek应用】ZoteroDeepseek 阅读和分析文献(上) 【Deepseek应用】ZoteroDeepseek 阅读和分析文献(下) 使用邀请码 cXfb9wOT 注册 硅基流…...
人工智能与深度学习的应用案例:从技术原理到实践创新
第一章 引言 人工智能(AI)作为21世纪最具变革性的技术之一,正通过深度学习(Deep Learning)等核心技术推动各行业的智能化进程。从计算机视觉到自然语言处理,从医疗诊断到工业制造,深度学习通过模拟人脑神经网络的层次化学习机制,实现了对复杂数据的高效分析与决策。本…...
Docker和DockerCompose基础教程及安装教程
Docker的应用场景 Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 CentOS Docker 安装 使用官方安装脚本自动安装 安装命令…...
ArcGIS操作:13 生成最小外接矩阵
应用情景:筛选出屋面是否能放下12*60m的长方形,作为起降场候选点(一个不规则的形状内,判断是否能放下指定长宽的长方形) 1、面积初步筛选 Area ≥ 720 ㎡ 面积计算见 2、打开 ArcToolbox → Data Management Tools …...
Qt:事件
目录 处理事件 鼠标事件 键盘事件 定时器事件 窗口事件 虽然 Qt 是跨平台的 C 开发框架,Qt 的很多能力其实是操作系统提供的 只不过 Qt 封装了系统的 API 事件 前面学习过信号槽: 用户进行的各种操作,就可能会产生出信号,可以…...
python 程序一次启动有两个进程的问题(flask)
0. 背景 写了一个使用 flask 作为服务框架的程序,发现每次启动程序的时候,使用 ps 都能观察到两个 python 进程。 此外,这个程序占用了 GPU 资源,我发现有两个 python 进程,分别占用了完全相同的 GPU 显存 1. 原因 …...
ethtool的资料
ethtoolethtool(8) — Linux manual pageethtool(8) - Linux man pageUsing ethtool in LinuxLooking at your Linux system’s network interface with ethtoolHow to Change Speed & Duplex of Ethernet Card in Linux with ethtool CommandNVIDIA EthtoolRed Hat Enterp…...
SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释
1、过滤器(Filter)的介绍 Spring Boot 的过滤器用于对数据进行过滤处理。通过 Spring Boot 的过滤器,程序开发人员不仅可以对用户通过 URL 地址发送的请求进行过滤处理(例如:过滤一些错误的请求或者请求中的敏感词等),而且可以对服务器返回的数据进行过滤处理(例如:压…...
“此电脑”中删除WPS云盘方法(百度网盘通用)
📣此方法适用于卸载WPS云盘后,WPS云盘图标依然在此电脑中显示的问题。 原理:通过注册来进行删除 步骤: WIN键R,打开运行窗口,输入regedit命令,来打开【注册表编辑器】; 从左侧,依…...
Manus AI:开启Agent元年的ChatGPT时刻(附赠资料)
1. Manus AI:全球首个通用Agent Manus AI 是全球首个通用人工智能代理,连接思想与行动,不仅思考,还能交付成果。Manus 擅长处理工作和生活中的各种任务,帮助用户完成一切。其核心理念是“less structure, more intell…...
ChromeDriver下载 最新版本 134.0.6998.35
平时为了下个驱动,到处找挺麻烦,收集了很多无偿分享给需要的人,仅供学习和交流。 ChromeDriver及浏览器134.0.6998.35 ChromeDriver及浏览器133.0.6943.141 ChromeDriver 102.0.5005.61 ChromeDriver 105.0.5195.102 ChromeDriver 108.0…...
Sass进阶之路:@forward 的可见性控制与变量覆盖
文章目录 前言1. 转发导入2. 添加前缀3. 控制可见性4. 转发时修改默认值总结 前言 在上一篇中,我们深入探讨了 use 的使用, 也介绍了 use 在使用深层模块中的变量时具有一定的缺点。所以在本文中,我们将深入解析 forward 的核心用法。 1. 转…...
MySQL作业一
一、创建数据库 #创建数据库 mysql> create database db_ck; Query OK, 1 row affected (0.01 sec)mysql> show databases like "db_%"; ----------------- | Database (db_%) | ----------------- | db_ck | | db_system | ----------------…...
虚拟机总结| 关于虚拟机的一些配置总结
前言 每次安装新的虚拟机都需要重新在网上搜索如何配置网络,我需要写一个自己的部署步骤,增加工作效率,不用每次配置的时候再去网上去翻找。 1.只需要联网功能记录(不固定IP) 1.1 修改ifcfg-ens33 vi etc/sysconfig/network-scripts/ifcfg…...
leetcode-sql数据库面试题冲刺(高频SQL五十题)
题目: 577.员工奖金 表:Employee -------------------- | Column Name | Type | -------------------- | empId | int | | name | varchar | | supervisor | int | | salary | int | -------------------- empId 是该表中具有唯一值的列。 该表的每一行…...
OpenManus:解锁测试工程师的效率密码——实践与应用指南
随着软件行业的快速发展,测试工程师面临的挑战也日益增多:如何在有限的时间内保证产品质量、如何高效生成测试数据、如何快速定位问题根源?这些问题直接影响到产品上线的节奏和用户体验。而在这一背景下,开源项目 OpenManus 的出现…...
Mybatis中的设计模式
1. 工厂模式(Factory Pattern) 概念:工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离,通过一个工厂类来负责创建对象。MyBatis 中的应用:MyBatis 使用 SqlSessionFactory 来创建 SqlSession 对…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
