当前位置: 首页 > news >正文

机试准备第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天

首先学习队列&#xff0c;队列有先进先出的特性。广度优先遍历需要基于队列实现&#xff0c;C中的stl引入了队列的实现方式。队列支持push()&#xff0c;进入队尾&#xff0c;pop()出队&#xff0c;队头出队&#xff0c;front()获取队首元素&#xff0c;back()获取队尾元素&…...

计算机二级MS之PPT

声明&#xff1a;跟着大猫和小黑学习随便记下一些笔记供大家参考&#xff0c;二级考试之前将持续更新&#xff0c;希望大家二级都能轻轻松松过啦&#xff0c;过了二级的大神也可以在评论区留言给点建议&#xff0c;感谢大家&#xff01;&#xff01; 文章目录 考题难点1cm25px…...

伊藤积分(Ito Integral):随机世界中的积分魔法

伊藤积分&#xff08;Ito Integral&#xff09;&#xff1a;随机世界中的积分魔法 在研究随机微分方程&#xff08;SDE&#xff09;和布朗运动时&#xff0c;伊藤积分&#xff08;Ito Integral&#xff09;是一个绕不开的关键概念。它是处理布朗运动随机项 ( d W ( t ) dW(t)…...

【Deepseek应用】Zotero+Deepseek 阅读和分析文献(下)

【Deepseek应用】Deepseek R1 本地部署&#xff08;OllamaDockerOpenWebUI&#xff09; 【Deepseek应用】ZoteroDeepseek 阅读和分析文献&#xff08;上&#xff09; 【Deepseek应用】ZoteroDeepseek 阅读和分析文献&#xff08;下&#xff09; 使用邀请码 cXfb9wOT 注册 硅基流…...

人工智能与深度学习的应用案例:从技术原理到实践创新

第一章 引言 人工智能(AI)作为21世纪最具变革性的技术之一,正通过深度学习(Deep Learning)等核心技术推动各行业的智能化进程。从计算机视觉到自然语言处理,从医疗诊断到工业制造,深度学习通过模拟人脑神经网络的层次化学习机制,实现了对复杂数据的高效分析与决策。本…...

Docker和DockerCompose基础教程及安装教程

Docker的应用场景 Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 CentOS Docker 安装 使用官方安装脚本自动安装 安装命令…...

ArcGIS操作:13 生成最小外接矩阵

应用情景&#xff1a;筛选出屋面是否能放下12*60m的长方形&#xff0c;作为起降场候选点&#xff08;一个不规则的形状内&#xff0c;判断是否能放下指定长宽的长方形&#xff09; 1、面积初步筛选 Area ≥ 720 ㎡ 面积计算见 2、打开 ArcToolbox → Data Management Tools …...

Qt:事件

目录 处理事件 鼠标事件 键盘事件 定时器事件 窗口事件 虽然 Qt 是跨平台的 C 开发框架&#xff0c;Qt 的很多能力其实是操作系统提供的 只不过 Qt 封装了系统的 API 事件 前面学习过信号槽&#xff1a; 用户进行的各种操作&#xff0c;就可能会产生出信号&#xff0c;可以…...

python 程序一次启动有两个进程的问题(flask)

0. 背景 写了一个使用 flask 作为服务框架的程序&#xff0c;发现每次启动程序的时候&#xff0c;使用 ps 都能观察到两个 python 进程。 此外&#xff0c;这个程序占用了 GPU 资源&#xff0c;我发现有两个 python 进程&#xff0c;分别占用了完全相同的 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云盘方法(百度网盘通用)

&#x1f4e3;此方法适用于卸载WPS云盘后&#xff0c;WPS云盘图标依然在此电脑中显示的问题。 原理&#xff1a;通过注册来进行删除 步骤&#xff1a; WIN键R,打开运行窗口&#xff0c;输入regedit命令&#xff0c;来打开【注册表编辑器】&#xff1b; 从左侧&#xff0c;依…...

Manus AI:开启Agent元年的ChatGPT时刻(附赠资料)

1. Manus AI&#xff1a;全球首个通用Agent Manus AI 是全球首个通用人工智能代理&#xff0c;连接思想与行动&#xff0c;不仅思考&#xff0c;还能交付成果。Manus 擅长处理工作和生活中的各种任务&#xff0c;帮助用户完成一切。其核心理念是“less structure, more intell…...

ChromeDriver下载 最新版本 134.0.6998.35

平时为了下个驱动&#xff0c;到处找挺麻烦&#xff0c;收集了很多无偿分享给需要的人&#xff0c;仅供学习和交流。 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. 转发时修改默认值总结 前言 在上一篇中&#xff0c;我们深入探讨了 use 的使用&#xff0c; 也介绍了 use 在使用深层模块中的变量时具有一定的缺点。所以在本文中&#xff0c;我们将深入解析 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 | ----------------…...

虚拟机总结| 关于虚拟机的一些配置总结

前言 每次安装新的虚拟机都需要重新在网上搜索如何配置网络&#xff0c;我需要写一个自己的部署步骤&#xff0c;增加工作效率&#xff0c;不用每次配置的时候再去网上去翻找。 1.只需要联网功能记录(不固定IP) 1.1 修改ifcfg-ens33 vi etc/sysconfig/network-scripts/ifcfg…...

leetcode-sql数据库面试题冲刺(高频SQL五十题)

题目&#xff1a; 577.员工奖金 表&#xff1a;Employee -------------------- | Column Name | Type | -------------------- | empId | int | | name | varchar | | supervisor | int | | salary | int | -------------------- empId 是该表中具有唯一值的列。 该表的每一行…...

OpenManus:解锁测试工程师的效率密码——实践与应用指南

随着软件行业的快速发展&#xff0c;测试工程师面临的挑战也日益增多&#xff1a;如何在有限的时间内保证产品质量、如何高效生成测试数据、如何快速定位问题根源&#xff1f;这些问题直接影响到产品上线的节奏和用户体验。而在这一背景下&#xff0c;开源项目 OpenManus 的出现…...

Mybatis中的设计模式

1. 工厂模式&#xff08;Factory Pattern&#xff09; 概念&#xff1a;工厂模式是一种创建对象的设计模式&#xff0c;它将对象的创建和使用分离&#xff0c;通过一个工厂类来负责创建对象。MyBatis 中的应用&#xff1a;MyBatis 使用 SqlSessionFactory 来创建 SqlSession 对…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...