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

news2024/10/9 11:54:16

目录

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;
    else
        return 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");
    else
        printf("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--;
        else
            print();
            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]);
        else
            printf("%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--;
        else
            print();
            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里面为空,空的话就不用就一定没有,输出-1
		stk[++tt]=x;//然后将x放进栈中
	}
	return 0;
}

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

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

相关文章

加密软件的桌面管理系统有什么?

1、IT资源管控&#xff1a;协助企事业单位管理者对内部计算机、宽带、打印、外围设备等IT资源进行管控&#xff0c;提高IT资源利用率。 2、规范内网行为&#xff1a;规范员工的计算机使用行为、网络使用行为、IT资产使用行为、设备使用行为 等&#xff0c;令员工活动在合规范围…

YOLOv11改进,YOLOv11改进损失函数采用Powerful-IoU:自适应惩罚因子和基于锚框质量的梯度调节函数(2024年最新IOU)

摘要 边界框回归(BBR)是目标检测中的核心任务之一,BBR损失函数显著影响其性能。然而,观察到现有基于IoU的损失函数存在不合理的惩罚因子,导致回归过程中锚框扩展,并显著减缓收敛速度。为了解决这个问题,深入分析了锚框扩展的原因。针对这个问题,提出了一种新的Powerfu…

PDF无法导出中文

font/SIMSUN.TTC with Identity-H is not recognized. 查看BaseFont源码发现".ttc," 改为"SIMSUN.TTC,a"提示数字转换异常 改为"SIMSUN.TTC,11"提示数字索引必须介于0和1之间 改为0或1结果正常 BaseFont baseFont BaseFont.createFont("/U…

办公AI推荐:阅读总结视频翻译文档文章等—包阅AI

目录 官网首页 网页阅读 思维导图 图书对话功能 1. 关键词 2. 总结 3. 主要内容 随心笔记 视频阅读 Mysql数据库案例 思维导图 内容评价 总结 想象一下&#xff0c;当您能在几分钟内掌握一小时视频的精华&#xff0c;或瞬间生成一本书的思维导图&#xff0c;您的学…

【2024最新】基于springboot+vue的旧物置换网站lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

富士胶片人像汽车照片Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 富士胶片人像汽车照片的调色旨在营造出独特的复古、文艺氛围。通过 Lightroom 的调色工具&#xff0c;将人像与汽车完美融合在具有富士胶片特色的画面中&#xff0c;展现出别样的美感。 预设信息 调色风格&#xff1a;富士胶片风格预设适合类型&#xff1a;人像&am…

读懂NCHW和NHWC

vscode ssh连接防火墙关闭 sudo ufw allow ssh打开即可 TensorRT推理参考: 一篇就够&#xff1a;高性能推理引擎理论与实践 (TensorRT)-阿里云开发者社区 下面很好的描述了各种不同的格式。 参考文档 Tensor 内存布局 — MegEngine 1.13.2 文档 对于”NCHW” 而言&#xff0c…

Spring与Spring Boot之间的区别

Spring和Spring Boot是用于开发Java企业应用的两个主流框架。虽然它们都属于Spring生态系统的一部分&#xff0c;但是它们各自有不同的使用场景和特点。 在本文中&#xff0c;我们将探讨Spring与Spring Boot之间的差异&#xff0c;针对他们之间特性的差异&#xff0c;做一个详…

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

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

图书商城|基于springBoot的图书商城管理系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数…

pgadmin4敏感信息泄露 CVE-2024-9014

0x01 产品描述&#xff1a; pgAdmin是全球最先进的开源数据库Postgres的领先开源管理工具。 pgAdmin 4旨在满足新手和经验丰富的Postgres用户的需求&#xff0c;提供了强大的图形界面&#xff0c;可简化数据库对象的创建&#xff0c;维护和使用。其可以在Linux&#xff0c;Unix…

Python绘制--绘制心形曲线

今天&#xff0c;我们将通过Python代码来绘制一个心形曲线&#xff0c;这是一个经典的数学表达。 一、心形曲线的数学原理 心形曲线&#xff0c;也被称为心脏曲线&#xff0c;是一个代数曲线&#xff0c;可以通过参数方程定义。其数学表达式如下&#xff1a; x16sin⁡3(t)x16…

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

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

flatten-maven-plugin统一版本打包失败问题记录

问题&#xff1a; dependencies.dependency.version for xxx:jar is missing. xxx:${revision} 子模块打包不会自动打包依赖的其他包 排查过程&#xff1a; 1&#xff1a;查看flatten-maven-plugin版本是否有冲突&#xff0c;与maven.compiler版本是否有冲突 目前版本&…

成都睿明智科技有限公司怎么样靠谱吗?

随着短视频与直播的深度融合&#xff0c;抖音电商凭借其强大的流量入口、精准的算法推荐以及便捷的购物体验&#xff0c;迅速崛起。对于传统企业和新兴品牌而言&#xff0c;这无疑是一个不可多得的机遇。然而&#xff0c;如何在这片红海中脱颖而出&#xff0c;就需要借助专业的…

u盘部分文件无故消失是怎么回事?5个妙招让其重新出现!

在使用U盘的过程中&#xff0c;我们也会遇上U盘部分文件无故消失的烦恼。防不胜防的数据丢失让我们的生活节奏被扰乱&#xff0c;不免得会心生烦躁与焦虑。但现在已经有很多方法去应对U盘的文件丢失&#xff0c;能够帮助我们找回丢失的重要资料&#xff01;U盘文件无故消失了怎…

Spring Boot 之 Lombok 使用详解

Lombok 是一个 Java 库&#xff0c;它通过注解自动生成样板代码&#xff0c;例如 getter、setter、构造函数、equals()、hashCode() 等&#xff0c;从而减少代码冗余&#xff0c;提高开发效率。在 Spring Boot 项目中使用 Lombok 可以使代码更加简洁易读。 本文将详细介绍 Lom…

YOLO11改进|注意力机制篇|引入线性注意力机制FLAttention

目录 一、【FLA】注意力机制1.1【FLA】注意力介绍1.2【FLA】核心代码 二、添加【FLA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【FLA】注意力机制 1.1【FLA】注意力介绍 下图是【FLA】的结构图&#xff0c;让我们简单分…

Java并发:同步工具类(信号量,等待完成,阶段同步,Exchanger,Phaser)

1&#xff0c;信号量&#xff08;Stemaphore&#xff09; Semaphore也就是信号量&#xff0c;提供了资源数量的并发访问控制&#xff0c;其使用代码很简单&#xff0c;如下所示&#xff1a; // 一开始有5份共享资源。第二个参数表示是否是公平 // 公平锁排队&#xff0c;非公…

人脸识别face-api.js应用简介

前阵子学习了一下face-api.js &#xff0c;偶有心得&#xff0c;跟大家分享一下。 face-api.js的原始项目是https://github.com/justadudewhohacks/face-api.js &#xff0c;最后一个release是2020年3月22日的0.22.2版&#xff0c;组件较老&#xff0c;API文档很全&#xff0c;…