考研复试机试 | C++ | 王道机试课程笔记

news2024/9/28 19:15:28

目录

  • Zero-complexity (上交复试题)
    • 题目:
    • 代码:
  • 括号匹配问题
    • 题目:
    • 代码:
  • 表达式解析问题 (浙大机试题)
    • 题目:
    • 代码:

标准库里提供了栈

stack<typename> myStack
.size() 栈的大小
.push() 压栈
.top() 获取栈顶元素
.pop() 弹栈
.empty()判断栈是否为空

整数的数据类型
在这里插入图片描述

Zero-complexity (上交复试题)

题目:

You are given a sequence of integer numbers. Zero-complexity transposition of the sequence is the reverse of this sequence. Your task is to write a program that prints zero-complexity transposition of the given sequence.

输入描述:

For each case, the first line of the input file contains one integer n-length of the sequence (0 < n ≤ 10 000). The second line contains n integers numbers-a1, a2, …, an (-1 000 000 000 000 000 ≤ ai ≤ 1 000 000 000 000 000).

输出描述:

For each case, on the first line of the output file print the sequence in the reverse order.

示例1
输入
5
-3 4 6 -8 9
输出
9 -8 6 4 -3

代码:

#include <stack>
#include <cstdio>

using namespace std;

int main(){
	// 题目中介绍的数据范围大概是10的15次方,int不可以用 
	stack <long long> myStack;
	int n;
	long long num;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%lld",&num); //%lld 读取long long类型的六进制数
		myStack.push(num);
	}
	while(!myStack.empty()){
		printf("%lld ",myStack.top());
		myStack.pop(); 
	}
	printf("\n");
}

读取字符串的操作
在这里插入图片描述
在这里插入图片描述

括号匹配问题

题目:

在这里插入图片描述

代码:

#include <stack>
#include <cstdio>
#include <string> 

using namespace std;

int main(){
	char buf[200];
	while(fgets(buf,200,stdin)!=NULL){
		// fgets配合while实现不确定数量的多行读取
		string str = buf; //转化为C++风格的字符串 
		str.pop_back(); // str去掉了额外的换行
		
		stack<unsigned> indexStack; // 存储了左括号的下标
		string res;//保存输出的结果
		for(unsigned i=0;i<str.size();i++){
			// 如果是左括号 
			if(str[i] == '('){
				indexStack.push(i);
				// 姑且认为左括号非法
				res.push_back('$'); 
			}
			// 如果是右括号 
			else if(str[i] == ')'){
				// 此时栈中没有左括号  非法 
				if(indexStack.empty()){
					res.push_back('?');
				}
				else{
					// 如果合法,栈顶原来左括号下标弹出,res原左括号的值改为空格 
					res.push_back(' ');
					res[indexStack.top()] = ' ';
					indexStack.pop(); 
				}
			}
			// 如果是字母 
			else{
				res.push_back(' ');
			} 
		} 
		// 输出 
		printf("%s\n%s\n",str.c_str(),res.c_str()); 
		
	}
}

表达式解析问题 (浙大机试题)

题目:

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

输入描述:
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

输出描述:
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

示例1
输入:
1 + 2
4 + 2 * 5 - 7 / 11
0

输出:
3.00
13.36

代码:

#include <stack>
#include <cstdio>
#include <string> 
#include <map> 

using namespace std;

int main(){
	char buf[300];
	// 设置字符的优先级 
	map<char,int> priority = {
		 {'$',0},
		 {'+',1},
		 {'-',1},
		 {'*',2},
		 {'/',2},
	};
	while(fgets(buf,300,stdin)!=NULL){
		string expr = buf;
		expr.pop_back(); //删除末尾的换行符 
		
		if(expr == "0") break;
		expr.push_back('$'); //补充一个虚拟的终止符
		
		string num; 
		stack<double> numstack; // 数字栈 
		stack<char> operstack;  // 运算符栈 
		// 扫描每个表达式中的字符 
		for(unsigned i=0;i<expr.size();i++){
			// 扫描到数字 
			if(expr[i] >= '0' && expr[i] <= '9'){
				num.push_back(expr[i]);
			}
			// 如果扫描到空格
			else if(expr[i] == ' '){
				if(num!=""){
					numstack.push(stod(num)); // stod --> string to double
					num = ""; // num置空 
				}
			}
			// 扫描到运算符 
			else{
				if(expr[i] == '$'){
					if(num!=""){
					numstack.push(stod(num)); // stod --> string to double
					num = ""; // num置空 
					}
				}
				while(!operstack.empty()&&priority[operstack.top()] >= priority[expr[i]]){
				// 新来的运算符的优先级不高于栈顶的优先级  
				char oper = operstack.top();
				operstack.pop();
				double rhs = numstack.top();
				numstack.pop(); 
				double lhs = numstack.top();
				numstack.pop();
				switch(oper){
					case '+':
						numstack.push(lhs+rhs);
						break;
					case '-':
						numstack.push(lhs-rhs);
						break;
					case '*':
						numstack.push(lhs*rhs);
						break;
					case '/':
						numstack.push(lhs/rhs);
						break;
					} 
				}
				//所有比expr[i]优先级更高的运算符都计算过了 
				// 接下来吧这个高优先级的运算符入栈
				operstack.push(expr[i]); 
			}	 
		} 
		
		// 所有的计算都结束了,此时数字栈中存放的是最终结果 
		printf("%.2f\n",numstack.top()); 
	}
}

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

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

相关文章

互斥信号+任务临界创建+任务锁

普通信号量 1、信号量概念 2、创建信号量函数 3、互斥信号量 创建互斥信号量函数 等待信号量函数 释放互斥信号量 4、创建任务临界区 5、任务锁 任务上锁函数 ​编辑 任务结束函数 效果 普通信号量 1、信号量概念 信号量像是一种上锁机制&#xff0c;代码必须获…

Java性能-回收算法-Throughout回收算法

垃圾回收算法 理解Throughput回收器 回收器三个基本操作——回收 找到不使用的对象 释放内存 压缩堆碎片 Minor GC和Full GC&#xff0c;每个操作都会标记&#xff0c;释放和压缩对应的目标分代 [63.205s][info][gc,start ] GC(13) Pause Full (Ergonomics) [63.205s][info][…

Odoo丨Odoo框架源码研读三:异常处理与定制化开发

Odoo丨Odoo框架源码研读三&#xff1a;异常处理与定制化开发 Odoo源码研读的第三期内容&#xff1a;异常处理与定制化开发。 *异常处理* Odoo中的Exception是对Python内置异常做了继承和封装&#xff0c;设定了自己核心的几个Exception。 而对异常的处理和Python内置异常的…

【趋势分析方法三】MATLAB代码实现TFPW-MK检验

目前水文时间序列趋势分析的方法很多&#xff0c;主要分为参数检验和非参数检验两大类&#xff1a; 参数检验中常用的有线性回归法、滑动平均法、累积距平法等非参数检验则主要包括Mann-Kendal&#xff08;MK&#xff09;法和 Spearman 秩次相关法等 虽然从理论上讲&#xff…

2023年,什么行业更有发展前景?

关于有前景有发展的行业推荐&#xff0c;小课今天还是推荐咱们IT互联网行业。 很多人会说现在懂电脑的那么多,这个行业都饱和了,很多学电脑的找不到工作都改行了。但事实是现在每个行各业都需要互联网&#xff0c;需要懂电脑的技术人才&#xff0c;尤其是在云计算、大数据到来…

了解一下TCP/IP协议族

在《简单说说OSI网络七层模型》中讲到&#xff0c;目前实际使用的网络模型是 TCP/IP 模型&#xff0c;它对 OSI 模型进行了简化&#xff0c;只包含了四层&#xff0c;从上到下分别是应用层、传输层、网络层和链路层&#xff08;网络接口层&#xff09;&#xff0c;每一层都包含…

《安富莱嵌入式周报》第304期:开源硬件耳机设计,AI单片机STM32N6已确定为M55内核,另外还有新品STM32H5, H50X, H7R, H7S发布

往期周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; 第6期ThreadX视频教程&#xff1a;图文并茂吃透RTOS运行机制&#xff0c;任务管理&…

微信小程序的全局弹窗以及全局实例

全局组件 微信小程序组件关系中&#xff0c;父组件使用子组件需要在父组件index.json中引入子组件&#xff0c;然后在父组件页面中使用&#xff0c;这种组件的对应状态是一对一的&#xff0c;一个组件对应一个页面。如果有一个全局弹窗&#xff08;登录&#xff09;&#xff0…

拒绝select *,Navicat快捷查询表中所有字段以,隔开两种方式【附带阿里开发手册】

一、前言 今天公司规定了不要使用SELECT *进行查询&#xff0c;让我想到阿里的《Java 开发手册》 中的ORM 映射规范也是这样的&#xff0c;于是翻出来看看&#xff0c;刚刚好重温一下&#xff01; 规范看了一定要实践&#xff0c;严格规范自己的代码风格&#xff0c;做一个优…

TEMU联盟计划用意何在?做推广达人真的能收入满满吗?

据东哥近期了解&#xff0c;Temu在北美市场表现十分火爆&#xff0c;甚至冲上了AppStore下载榜第一名。Temu在美国市场上采用了类似PDD的病毒式传播策略&#xff0c;以实惠的产品和折扣吸引消费者并动员普通人大量传播链接和App下载&#xff0c;所以有了TEMU联盟计划&#xff0…

Sprng依赖注入(三):构造方法注入是如何工作的?

前言这是Spring依赖注入系列的第三篇&#xff0c;前两篇主要分析了Spring bean依赖属性注入的两种方式&#xff0c;是字段注入和setter方法注入&#xff0c;单独比较这两种方式&#xff0c;会发现其过程和工作原理非常类似&#xff0c;那么构造方法注入会不会也和前两种比较类似…

搭建个人博客保姆级教程(二)

文章目录一. Springboot项目打包成jar包二. mySql部署三. UI 项目部署一. Springboot项目打包成jar包 使用IDEA进行打包&#xff0c;当然也有其他部署方式&#xff0c;如使用maven进行打包&#xff0c;可自行查询资料。 1.打开项目&#xff0c;右击项目选中Open Module Settin…

【C++的OpenCV】第五课-OpenCV图像常用操作(二):OpenCV的基本绘图、平滑滤波(模糊)处理

让我们继续一、OpenCV基本绘图1.1 OpenCV关于绘图的操作1.1.1 cv::Point()1.1.2 cv::Scalar()1.1.3 cv::line()画线1.1.4 cv::rectangle()画矩形1.1.5 cv::circle()画圆二、图像的平滑滤波处理2.1 概念2.2 OpenCV关于图像模糊的操作2.2.1 常用滤波器的分类2.2.2 各种滤波方法具…

【4】linux命令每日分享——cd切换路径

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的 类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&am…

云计算学习课程——越来越重要的云安全

2023&#xff0c;越来越多的企业和组织正在或即将把核心系统和数据迁移上云端&#xff0c;其中以公有云和服务居多&#xff0c;那么就意味着在数据迁移的过程中会出现安全问题的几率更大。企业也越来越注重云安全体系&#xff0c;对我们云计算运维工程师来说&#xff0c;也是一…

Linux 日志讲解

目录 日志系统的分类 常见日志文件 日志等级 journalctl查看指定日志信息 日志系统的分类 系统日志 记录系统的运行情况和内核信息 用户日志 记录用户的访问信息 程序日志 记录程序运行的各种时间&#xff08;每个服务程序都有自己独立的日志文件&#x…

UE4 手把手教你做插件(4)做一个可以拖入场景的小方块插件

0&#xff0c;前言 学习一下如何编写一个有actor的插件&#xff0c;能够将它拖入场景里面。 1&#xff0c;创建插件 &#xff08;1&#xff09;创建一个空白插件 添加之后vs里面就会多出一个目录&#xff1a; &#xff08;2&#xff09;给插件添加一个actor 创建完actor之后&am…

渗透测试之交换式网络嗅探实验

渗透测试之交换式网络嗅探实验实验目的一、实验原理1.1 网络嗅探器Sniffer的工作原理1.2 网络嗅探器的分类1.3 网络嗅探器Sniffer的作用二、实验环境2.1 操作机器2.2 实验工具Sniffer2.3 安装工具Sniffer三、实验步骤1. 熟悉Sniffer工具的启动2. 进行监听3. 熟悉Sniffer工具的介…

Python数据结构与算法篇(四)-- 链表的实现

实现线性表的另一种常用方式就是基于链接结构&#xff0c;用链接关系显式表示元素之间的顺序关联。基于链接技术实现的线性表称为链接表或者链表。 采用链接方式实现线性表的基本想法如下: 把表中的元素分别存储在一批独立的存储块&#xff08;称为表的结点&#xff09;里。保…

刷题记录:牛客NC51112Stars in Your Window 扫描线

传送门:牛客 题目描述: Here comes the problem: Assume the sky is a flat plane. All the stars lie on it with a location (x, y). for each star, there is a grade ranging from 1 to 100, representing its brightness, where 100 is the brightest and 1 is the we…