SDUT数据结构与算法第二次机测

目录

7-1 括号匹配

7-2 后缀式求值

7-3 表达式转换

 7-4 【模板】KMP字符串匹配

比较详细注释和图解请看KMP——字符串匹配-CSDN博客,(点击链接可跳转)一看就会

7-5 约瑟夫环(押题,重要)

7-6 单调栈(新题,有注释详解)

7-1 括号匹配

给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。

输入格式:

输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。

输出格式:

如果括号配对,输出yes,否则输出no。

输入样例1:

sin(10+20)

输出样例1:

yes

输入样例2:

{[}]

输出样例2:

no
#include<stdio.h>
char stack[10086];
int top=-1;
void push(char x)
{stack[++top]=x;
}
int pop()
{if(top==-1)return 0;elsereturn stack[top--];
}
int peidui(char str[])
{int i;int len=strlen(str);while(str[i]!='\0'){if(str[i]=='('||str[i]=='['||str[i]=='{')push(str[i]);else if(str[i]==')'||str[i]==']'||str[i]=='}'){if(top==-1||str[i]-pop()>2)return 0;}i=i+1;}return(top==-1);
}
int main()
{char str[10086];fgets(str,sizeof(str),stdin);if(peidui(str))printf("yes");elseprintf("no");return 0;
}

7-2 后缀式求值

我们人类习惯于书写“中缀式”,如 3 + 5 * 2 ,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)

而计算机更加习惯“后缀式”(也叫“逆波兰式”,Reverse Polish Notation)。上述中缀式对应的后缀式是: 3 5 2 * +

现在,请对输入的后缀式进行求值。

输入格式:

在一行中输入一个后缀式,运算数运算符之间用空格分隔,运算数长度不超过6位,运算符仅有+ - * / 四种。

输出格式:

在一行中输出后缀式的值,保留一位小数。

输入样例:

3 5.4 2.2 * +

输出样例:

14.9
#include<stdio.h>
int main()
{char str[10086];double st[10086];int i=0;while(scanf("%s",str)!=EOF){if(str[1]=='\0'&&(str[0]=='+'||str[0]=='-'||str[0]=='*'||str[0]=='/')){double num1,num2,current;num1=st[--i];num2=st[--i];switch(str[0]){case'+':current=num2+num1;st[i++]=current;break;case'-':current=num2-num1;st[i++]=current;break;case'*':current=num2*num1;st[i++]=current;break;case'/':current=num2/num1;st[i++]=current;break;}}else{double num;sscanf(str,"%lf",&num);st[i++]=num;}}printf("%.1f",st[0]);return 0;
}

7-3 表达式转换

算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。

输入格式:

输入在一行中给出不含空格的中缀表达式,可包含+-*/以及左右括号(),表达式不超过20个字符。

输出格式:

在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。

输入样例:

2+3*(7-4)+8/4

输出样例:

2 3 7 4 - * + 8 4 / +
#include<stdio.h>
#include<string.h>
void print()
{static int flag=0;if(flag!=0)putchar(' ');flag++;
}
int main()
{char stack[10086];char str[10086];int top=-1,i;gets(str);int len=strlen(str);for(i=0;i<len;i++){if((str[i]=='+'||str[i]=='-')&&(i==0||str[i-1]=='(')||isdigit(str[i])){print();if(str[i]!='+')putchar(str[i]);while(str[i+1]=='.'||isdigit(str[i+1]))putchar(str[++i]);}else{if(str[i]==')'){while(top!=-1&&stack[top]!='('){print();putchar(stack[top--]);}if(top!=-1){top--;}}else{if(top==-1){stack[++top]=str[i];}else{while(top>-1&&stack[top]!='('){if(str[i]=='('||((str[i]=='*'||str[i]=='/')&&(stack[top]=='+'||stack[top]=='-'))){break;}print();putchar(stack[top--]);}stack[++top]=str[i];}}}}while(top>-1){if(stack[top]=='(')top--;elseprint();putchar(stack[top--]);}return 0;
}

 7-4 【模板】KMP字符串匹配

比较详细注释和图解请看KMP——字符串匹配-CSDN博客,(点击链接可跳转)一看就会

给出两个字符串text和pattern,其中pattern为text的子串,求出pattern在text中所有出现的位置。

为了减少骗分的情况,接下来还要输出子串的前缀数组next。

输入格式:

第一行为一个字符串,即为text。

第二行为一个字符串,即为pattern。

输出格式:

若干行,每行包含一个整数,表示pattern在text中出现的位置。

接下来1行,包括length(pattern)个整数,表示前缀数组next[i]的值,数据间以一个空格分隔,行尾无多余空格。

输入样例:

ABABABC
ABA

输出样例:

1
3
0 0 1

样例说明:

snap650.jpg

#include<stdio.h>
#include<string.h>
int main()
{char a[1000010],b[1000010];int next[1000010];scanf("%s %s",a+1,b+1);int m=strlen(a+1),n=strlen(b+1);int i,j=0;for(i=2;i<=n;i++){while(j&&b[i]!=b[j+1]){j=next[j];}if(b[i]==b[j+1]){j++;}next[i]=j;}j=0;for(i=1;i<=m;i++){while(j&&a[i]!=b[j+1]){j=next[j];}if(a[i]==b[j+1])j++;if(j==n){printf("%d\n",i-n+1);j=next[j];}}for(i=1;i<=n;i++){if(i==n)        printf("%d",next[i]);elseprintf("%d ",next[i]);}return 0;
}

7-5 约瑟夫环(押题,重要)

N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。
请按退出顺序输出每个退出人的原序号。

输入格式:

输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。

输出格式:

按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。

输入样例:

在这里给出一组输入。例如:

7 3

输出样例:

3 6 2 7 5 1 4
#include<stdio.h>
#include<string.h>
void print()
{static int flag=0;if(flag!=0)putchar(' ');flag++;
}
int main()
{char stack[10086];char str[10086];int top=-1,i;gets(str);int len=strlen(str);for(i=0;i<len;i++){if((str[i]=='+'||str[i]=='-')&&(i==0||str[i-1]=='(')||isdigit(str[i])){print();if(str[i]!='+')putchar(str[i]);while(str[i+1]=='.'||isdigit(str[i+1]))putchar(str[++i]);}else{if(str[i]==')'){while(top!=-1&&stack[top]!='('){print();putchar(stack[top--]);}if(top!=-1){top--;}}else{if(top==-1){stack[++top]=str[i];}else{while(top>-1&&stack[top]!='('){if(str[i]=='('||((str[i]=='*'||str[i]=='/')&&(stack[top]=='+'||stack[top]=='-'))){break;}print();putchar(stack[top--]);}stack[++top]=str[i];}}}}while(top>-1){if(stack[top]=='(')top--;elseprint();putchar(stack[top--]);}return 0;
}

7-6 单调栈(新题,有注释详解)

给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。

输入格式:

第一行包含整数 N,表示数列长度。

第二行包含 N 个整数,表示整数数列。

输出格式:

共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。

数据范围:

1≤N≤105
1≤数列中元素≤109

输入样例:

在这里给出一组输入。例如:

5
3 4 2 7 5

输出样例:

在这里给出相应的输出。例如:

-1 3 -1 2 2 
//此题要求解出每个数左边第一个比它小的数
//我们把左边已经输入的数存放到一个栈中,因为栈的特性是后进先出
#include<iostream>
using namespace std;
const int N=100010;
int n;
int stk[N],tt;
int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++){int x;scanf("%d",&x);while(tt&&stk[tt]>=x){tt--;//tt不为0,且stk[tt]>=x,也就是stk里面这个数大于目标值,他不应该在里面,弹出即可}if(tt) printf("%d ",stk[tt]);//如果上述条件都满足了,那说明stk里面的值就是第一个小于x的值,输出else printf("-1 ");//如果都弹出去完了,tt为0了,也就说明stk里面为空,空的话就不用就一定没有,输出-1stk[++tt]=x;//然后将x放进栈中}return 0;
}

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

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

相关文章

迪士尼数据泄露事件:全面审视数据安全策略与未来防护方向

迪士尼数据泄露事件概述 一、 事件背景以及影响 在全球数字化转型加速的浪潮中&#xff0c;数据安全已成为企业运营不可忽视的基石。 华特迪士尼公司&#xff0c;作为全球知名的娱乐传媒巨头&#xff0c;其数据泄露事件无疑为业界敲响了警钟。此次事件不仅揭示了数据保护的严…

Pymysql cur.fetchall() 返回 None

大家在pymysql 的 cur.fetchall() 函数通常用于获取执行 SQL 查询后的所有结果。该函数返回一个包含查询结果的元组列表。如果 cur.fetchall() 返回 None&#xff0c;可能是由于以下多种问题导致的。 1、问题背景 在使用 Pymysql 库连接到 MySQL 数据库时&#xff0c;遇到这样…

YOLOv5改进——普通卷积和C3模块更换为GhostConvV2卷积和C3GhostV2模块

目录 一、GhostNetV2核心代码 二、修改common.py 三、修改yolo.py 三、建立yaml文件 四、训练 一、GhostNetV2核心代码 在models文件夹下新建modules文件夹&#xff0c;在modules文件夹下新建一个py文件。这里为GhostV2.py。复制以下代码到文件里面。 # TODO: ghostnetv…

好用的免费录屏软件推荐,让软件操作教程制作不再困难

录屏软件就像是我们做教程或者玩游戏时的“小助手”&#xff0c;它能帮我们把屏幕上的东西都记录下来&#xff0c;让视频看起来更高大上。今天我就给你推荐三款免费的好货&#xff0c;用它们做教程&#xff0c;保证让你轻松又开心。 1. 福昕录屏大师 虫洞 https://www.foxits…

【读书笔记·VLSI电路设计方法解密】问题4:今天的设计环境中使用的主要工艺技术是什么

主流的工艺技术是互补金属氧化物半导体&#xff08;CMOS&#xff09;技术。其他技术还包括双极性、双极CMOS&#xff08;biCMOS&#xff09;、绝缘体上硅&#xff08;SOI&#xff09;和砷化镓&#xff08;GaAs&#xff09;。 在CMOS技术中&#xff0c;"互补对称"指的…

SD入门教程一:Stable Diffusion 基础(技术篇)

前言 在开篇的时候就大致讲了SD和VAE&#xff0c;那么今天我们具象化地再来讲讲Stable Diffusion&#xff08;稳定扩散&#xff09;。 严格说来它是一个由几个组件&#xff08;模型&#xff09;构成的系统&#xff0c;而非单独的一个模型。我以最常见的文生图为例&#xff0c;…

大型保险公司进行营销活动时,如何与外部客户实现文件安全外发?

大型保险公司为了吸引新客户、维护老客户、提升品牌形象以及推广特定的保险产品&#xff0c;会定期向外部客户或潜在客户发送营销文件。在客户签单后&#xff0c;保险公司会将客户相关的签单个人文件发送给客户。因此&#xff0c;大型保险公司内部存在较为频繁且重要的文件安全…

安装DNS

在 CentOS 7 上安装并配置 BIND 以实现 DNS 的正向和反向解析可以按照以下步骤进行&#xff1a; 安装 BIND 打开终端并运行以下命令来安装 BIND 及其工具&#xff1a; yum install bind bind-utils -y配置 BIND 编辑主配置文件&#xff1a; 使用文本编辑器打开 BIND 的主配…

电商价格监测的创新之路

在当今数字化高速发展的时代&#xff0c;电商如汹涌的浪潮席卷了商业的每一个角落。品牌们在这片广阔的电商海洋中奋力前行&#xff0c;而价格监测则成为了他们手中至关重要的罗盘。 力维网络以其专业的价格监测服务&#xff0c;为品牌在电商之海的航行点亮了一盏明灯。然而&a…

多节点网络流量监控与网络性能优化的利器——轻松实现高效管理

目录 为什么网络性能监控如此重要&#xff1f; 多节点网络流量监控如何优化网络性能&#xff1f; 实例&#xff1a;AnaTraf如何帮助企业解决网络故障 了解更多 随着企业网络规模的不断扩大&#xff0c;维护网络性能的复杂性日益增加。如何实时监控网络流量、快速排查网络故…

网安加·百家讲坛 | 潘继平:AI赋能DevOps平台:全面提升代码安全性

作者简介&#xff1a;潘继平&#xff0c;中国软协项目管理专委会专家&#xff0c;深圳市软件行业协会特聘专家。华为土耳其研究所外聘高级项目顾问&#xff0c;负责华为云应用生态圈产品线研发管理。曾为华为全球技术服务中心、华为制造IT以及华为流程IT解决方案提供等多个部门…

(二)、CT系统硬件构成

简单来说分为以下几个步骤来描述整个CT系统的运行流程&#xff1a; X射线管和探测器环绕被测物体&#xff0c;准直器进行高度准直X射线。X射线穿过被测物料时发生衰减&#xff0c;其中有两个探测器&#xff0c;一个是参考探测器记录和测量来自X射线管的辐射强度&#xff0c;另…

【C语言从不挂科到高绩点】28-数组综合运用

Hello&#xff01;彦祖们&#xff0c;俺又回来了&#xff01;&#xff01;&#xff01;&#xff0c;继续给大家分享 《C语言从不挂科到高绩点》课程!! 数组是我们在C语言学习过程中比较重要的一个知识点&#xff0c;也是在今后的学习与开发过程中经常会用到的技能&#xff0c;…

明达IO:赋能工业机器人新未来

摘要&#xff1a; 明达技术以其卓越的分布式IO&#xff08;MR30&#xff09;与一体式IO&#xff08;MR20&#xff09;产品&#xff0c;为工业机器人行业提供了完美的信号交互解决方案。在集群式机器人应用场景中&#xff0c;MR30分布式IO以其稳定性能和自由热插拔功能&#xf…

“跨时空拥抱”风靡TikTok,这款AI视频工具借势变现20万美金,你也来看看吧!

用AI生成跨时空拥抱最近悄悄在海外翻红&#xff0c;还带火了一款AI视频产品。 8月28日&#xff0c;TikTok博主“iammskira”发布了一条配文为“用AI实现了拥抱我的妈妈&#xff0c;因为她已经不在人世了”的短视频教程&#xff0c;在TikTok上走红。 视频中&#xff0c;AI不仅…

Java毕业设计:Java社区物品置换网站系统毕业设计源代码作品和开题报告

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

xss-labs靶场第五关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.…

如何下载和安装CLion,图文详解

一、下载 登录JetBrains官网&#xff0c;下载最新版本的Clion&#xff0c;Clion目前没有社区版&#xff0c;都是专业版。 二、安装 1、启动Clion安装程序&#xff0c;下一步。 2、修改安装目录&#xff0c;下一步。 3、创建桌面快捷方式&#xff0c;更新PATH变量&#xff0…

【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段

文章目录 前言1. 修改CS、IP的指令2. 问题分析:CPU运行的流程3. 代码段小结结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深入理解计…

Excel中多条件筛选问题解决方法

例题解析: 有雇员信息表如下所示&#xff1a; 查询出 Gender 为 Female&#xff0c;且 1970 年以前出生的员工&#xff1a; spl("E(?1).select(Gender""Female"" && Birthday<""1970-01-01"")",A1:O32)SPL桌面…