NOI题库2.2括号匹配分析与题解(C++)

合集下载

NOIP2012普及组初赛及答案(C )

NOIP2012普及组初赛及答案(C  )

第十八届全国青少年信息学奥林匹克联赛初赛(普及组C++语言试题)竞赛时间:2012年10月13日14:30~16:30选手注意:●试题纸共有10页,答题纸共有2页,满分100分。

请在答题纸上作答,写在试题纸上一律无效。

●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料一、单项选择题(共20题,每题1.5分,共计30分;每题且仅有一个正确选项)1.计算机如果缺少(),将无法正常启动。

A.内存B.鼠标C.U盘D.摄像头2.()是一种先进先出的线性表。

A.栈B.队列C.哈希表(散列表)D.二叉树3.目前计算机芯片(集成电路)制造的主要原料是(),它是一种可以在沙子中提炼出的物质。

A.硅B.铜C.锗D.铝4.十六进制数9A在()进制下是232。

A.四B.八C.十D.十二5.()不属于操作系统。

A.Windows B.DOS C.Photoshop D.NOI Linux6.如果一棵二叉树的中序遍历是BAC,那么它的先序遍历不可能是()。

A.ABC B.CBA C.ACB D.BAC7.目前个人电脑的()市场占有率最靠前的厂商包括Intel、AMD等公司。

A.显示器B.CPU C.内存D.鼠标8.使用冒泡排序对序列进行升序排列,每执行一次交换操作系统将会减少1个逆序对,因此序列5,4,3,2,1需要执行()次操作,才能完成冒泡排序。

A.0 B.5 C.10 D.159.1946年诞生于美国宾夕法尼亚大学的ENIAC属于()计算机。

A.电子管B.晶体管C.集成电路D.超大规模集成电路10.无论是TCP/IP模型还是OSI模型,都可以视为网络的分层模型,每个网络协议都会被归入某一层中。

如果用现实生活中的例子来比喻这些“层”,以下最恰当的是()。

A.中国公司的经理与波兰公司的经理交互商业文件B.军队发布命令C.国际会议中,每个人都与他国地位对等的人直接进行会谈D.体育比赛中,每一级比赛的优胜者晋级上一级比赛11.矢量图(Vector Image)图形文件所占的贮存空间比较小,并且无论如何放大、缩小或旋转等都不会失真,是因为它()。

noip2初赛普及组c++题目及答案

noip2初赛普及组c++题目及答案

第十六届全国青少年信息学奥林匹克联赛初赛试题(普及组C++语言两小时完成)••全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效••一、单项选择题(共20 题,每题 1.5 分,共计30 分。

每题有且仅有一个正确选项。

)1.2E+03 表示()。

A. 2.03B.5C.8D.20002.一个字节(b yte )由()个二进制位组成。

A.8B.16C.32D. 以上都有可能3.以下逻辑表达式的值恒为真的是()。

A.P V (?P A Q) V (?P A ?Q)B.Q V (?P A Q) V (P A ?Q)C.P V QV (P A ?Q) V (?P A Q)D.P V?QV(P A ?Q) V (?P A ?Q)4.Linux 下可执行文件的默认扩展名为()。

C.dllD. 以上都不是5.如果树根算第1 层,那么一棵n 层的二叉树最多有()个结点。

A.2 n-1B.2 nC.2 n+1D.2 n+16.提出“存储程序”的计算机工作原理的是()。

A.克劳德・香农B.戈登・摩尔C.查尔斯・巴比奇D.冯・诺依曼7.设X、Y、Z 分别代表三进制下的一位数字,若等式XY+ZX=XYX 在三进制下成立,那么同样在三进制下,等式XY*ZX= ()也成立。

A.YXZB.ZXYC.XYZD.XZY8. Pascal 语言、C语言和C++语言都属于()。

A. 面向对象语言B. 脚本语言C. 解释性语言D. 编译性语言9 .前缀表达式“+3*2+512 ”的值是()。

A.23B.25C.37D.6510.主存储器的存取速度比中央处理器(CPU)的工作速度慢得多,从而使得后者的效率受到影响。

而根据局部性原理,CPU 所访问的存储单元通常都趋于聚集在一个较小的连续区域中。

于是,为了提高系统整体的执行效率,在CPU 中引入了()。

A. 寄存器B. 高速缓存C. 闪存D. 外存11.一个字长为8 位的整数的补码是,则它的原码是()。

2023第32届全国高中计算机科学奥林匹克竞赛试题及答案

2023第32届全国高中计算机科学奥林匹克竞赛试题及答案

2023第32届全国高中计算机科学奥林匹克竞赛试题及答案简介这份文档包含了2023年第32届全国高中计算机科学奥林匹克竞赛的试题及答案。

这是一项高中生参与的计算机科学竞赛,旨在挑选出在计算机科学领域具备才华和潜力的年轻人。

试题1. 请编写一个程序,输入两个整数并输出它们的和。

2. 编写一个程序,检查一个字符串是否是回文字符串。

3. 设计一个算法,在给定的数组中找到两个数的和等于给定目标数的索引。

4. 编写一个程序,实现二叉树的前序遍历。

5. 请编写一个函数,计算给定列表中的所有偶数的和。

答案1. 程序示例:a = int(input("请输入第一个整数:"))b = int(input("请输入第二个整数:"))sum = a + bprint("它们的和为:" + str(sum))2. 程序示例:def is_palindrome(s):return s == s[::-1]string = input("请输入一个字符串:") if is_palindrome(string):print("是回文字符串")else:print("不是回文字符串")3. 算法示例:def find_sum_indices(nums, target): seen = {}for i, num in enumerate(nums):seen[num] = ireturn []nums = [2, 7, 11, 15]target = 9indices = find_sum_indices(nums, target) print("满足条件的索引为:" + str(indices)) 4. 程序示例:class Node:def __init__(self, value):self.value = valueself.left = Noneself.right = Nonedef preorder_traversal(root):if root:print(root.value, end=" ")preorder_traversal(root.left)preorder_traversal(root.right)创建示例二叉树root = Node(1)root.left = Node(2)root.right = Node(3)root.left.left = Node(4)root.left.right = Node(5)print("前序遍历结果:", end="")preorder_traversal(root)5. 程序示例:def sum_even_numbers(numbers):total = 0for num in numbers:if num % 2 == 0:total += numreturn totalnums = [1, 2, 3, 4, 5, 6]sum_of_evens = sum_even_numbers(nums)print("偶数的和为:" + str(sum_of_evens))以上是2023年第32届全国高中计算机科学奥林匹克竞赛的试题及答案。

NOIP初赛相关知识点及参考答案

NOIP初赛相关知识点及参考答案

相关知识点与参考答案一.单项选择题1、操作系统是系统软件的核心,是有效利用计算机的硬件、软件、数据等各种资源的好管家,它还向用户提供一套容易学习使用的操作命令。

常用的操作系统有:MS-DOS、PC-DOS、WINDOWS、UNIX、LINUX、OS/2等。

WORD、WPS是字处理软件,FOXBASE是数据库管理软件。

2、字长表示一个存储单元由多少位二进制数组成,八位机一个字长就是一个字节,十六位机一个字长可以表示两个字节。

字长位的多少,表明可访问存储器的地址多少。

3、操作系统一般存放在系统盘,计算机启动引导系统后,系统中的常用命令就驻留在内存中,方便用户使用计算机。

所以启动计算机引导系统就是把操作系统从系统盘中调入内存储器。

4、我们要清楚,快存实质是高速缓存,主存即内存,辅存也就是外存。

在这三种存储器中,以高速缓存最快,故此,通常常用的程序都是存放在高速缓存区里。

而主存的速度当然是比辅存要快了。

5、一般,对计算机工作有较大影响的有尘土、温度、湿度。

6、计算机的指令系统是由操作码与操作数组成。

7、通用寄存器的位数跟机器有关,取决于计算机的字长。

8、计算机能实现的全部指令的集合合称为指令系统。

执行各条指令所规定的操作是由指挥工作的控制器和执行运算的部件共同完成。

而控制器与运算器合起来称为CPU。

9、RAM(random access memory)随时读写存储器,供计算机工作时随机写入,计算机一旦断电后,其中的信息就会消失。

10、WINDOWS 9X是一种多任务的可视化的操作系统,它可以同时打开多个窗口,执行多个任务,而这些操作无论是应用程序还是文档编辑窗口,都可以利用图标、菜单或工具进行操作,即所见即所得。

所以称之为多任务图形方式的操作系统。

1-10参考答案:BBDCBBCABD11、常用的操作系统有:MS-DOS、PC-DOS、WINDOWS、UNIX、LINUX、OS/2等。

PASCAL是程序设计的语言系统软件。

NOIP初赛练习之二(解答题)

NOIP初赛练习之二(解答题)

NOIP初赛练习之二(解答题)前言:如何做解答题解答题一般是根据要求写出表达式或画出图等,涉及的知识点主要有数学方面的基本知识、数据结构方面的如树和图等、逻辑推理等,难点主要在写出递推公式。

写出公式之前要先从起始值开始进行摸索,写出若干个结果之后再观察其中的规律,再写出公式,一般是F (N)=……,省略号部分可能是F(N-1)、F(N-2)……等的数学表达式。

最后再验证公式的正确性,时间允许的话可从数学等方面加以证明(当然不要写出证明过程,除非要求你说明其正确性)。

有时是图形的变换,如正方形、三角形、圆等的旋转,先前给出了几个点相应的坐标,求旋转若干周后的各点坐标,这种情况一般用到求余的运算,当以N为一个周期时往往是用对N求余(mod n)的运算;如果是正反两种情况可以使用(-1)的若干次方的形式来转换两种状态,即用某一表达式乘以-1的若干次方。

有时是有关组合数学的知识,如排列或组合,确定是(分步)乘法原理还是(分类)加法原理。

对于排列分次序,而组合不分各元素的次序:组合:C(m, n)=n*(n-1)*….*(n-m+1)/m!排列:P (m, n)= n*(n-1)*….*(n-m+1)数据结构方面要对堆栈的先进后出原理、队列的先进先出原理、二叉树(结点)的遍历、图的邻接矩阵表示法熟悉。

至于逻辑推理方面的要将各个条件(描述)一一列出,排除矛盾情况,列举出可能的情况,写出符合条件的结果。

练习:1.公式推导(10分)1999年初中组初赛题根据Nocomachns定理,任何一个正整数n的立方一定可以表示成n个连续的奇数的和。

如:13= 123=3+ 533=7+9 +1143=13十15+17+19在这里,若将每一个式中的最小奇数称为X,那么当给出n之后,请写出X与n之间的关系表达式:___2、问题解答:(每题7分,共14分)2000初中组(1).已知,按中序遍历二叉树的结果为:abc问:有多少种不同形态的二叉树可以得到这一遍历结果,并画出这些二叉树。

NOIP2015普及组C++初赛试题及标准答案(高清版)

NOIP2015普及组C++初赛试题及标准答案(高清版)

第二十一届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题竞赛时间:2015年10月11日14:30~16:30选手注意:●试题纸共有7页,答题纸共有2页,满分100分。

请在答题纸上作答,写在试题纸上的一律无效。

●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。

一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)1.1MB等于()。

A. 1000字节B. 1024字节C. 1000 X 1000字节D. 1024 X 1024字节2.在PC机中,PENTIUM(奔腾)、酷睿、赛扬等是指()。

A. 生产厂家名称B. 硬盘的型号C. CPU的型号D. 显示器的型号3.操作系统的作用是()。

A. 把源程序译成目标程序B. 便于进行数据管理C. 控制和管理系统资源D. 实现硬件之间的连接4.在计算机内部用来传送、存贮、加工处理的数据或指令都是以()形式进行的。

A. 二进制码B. 八进制码C. 十进制码D. 智能拼音码5.下列说法正确的是()。

A. CPU的主要任务是执行数据运算和程序控制B. 存储器具有记忆能力,其中信息任何时候都不会丢失C. 两个显示器屏幕尺寸相同,则它们的分辨率必定相同D. 个人用户只能使用Wifi的方式连接到Internet6.二进制数00100100和00010100的和是()。

A. 00101000B. 01110011C. 01000100D. 001110007.与二进制小数0.1相等的十六进制数是()。

A. 0.8B. 0.4C. 0.2D. 0.18.所谓的“中断”是指()。

A. 操作系统随意停止一个程序的运行B. 当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的过程C. 因停机而停止一个程序的运行D. 电脑死机9.计算机病毒是()。

A. 通过计算机传播的危害人体健康的一种病毒B. 人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合C. 一种由于计算机元器件老化而产生的对生态环境有害的物质D. 利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒10.FTP可以用于()。

NOI题库2.2括号匹配分析与题解(C )

NOI题库2.2括号匹配分析与题解(C  )
for(int i = 0; i < S.size(); i++) //查找 {
if(S[i] == '(') //找到"(" {
left[j++] = i; //记录下标 S[i] = '$'; //假设该括号未匹配 }
9
else if(S[i] == ')') //找到")" {
if(left[j] >= 0) //有匹配的左括号,下标不为-1 {
$$ $
??
8
这样就写出了代码:
string s; while(getline(cin, S)) //读入整行 {
cout << S << endl; //输出原串 int left[102],j=0; //left[]记录所有"("在S中的下标,j只是指针 memset(left, -1, sizeof(left)); //初始化-1
1
问题描述
在某个字符串(长度不超过100)中有左 括号、右括号和大小写字母;规定(与常见 的算数式子一样)任何一个左括号都从内到 外与在它右边且距离最近的右括号匹配。写 一个程序,找到无法匹配的左括号和右括号 ,输出原来字符串,并在下一行标出不能匹 配的括号。不能匹配的左括号用“$”标注,不能 匹配的右括号用“?”标注。
2
输入
输入包括多组数据,每组数据一行,包 含一个字符串,只包含左右括号和大小写字 母,字符串长度不超过100
输出
对每组输出数据,输出两行,第一行包 含原始输入字符,第二行由"$","?"和空格组 成,"$"和"?"表示与之对应的左括号和右括号 不能匹配。

noi竞赛练习题

noi竞赛练习题

noi竞赛练习题NOI(National Olympiad in Informatics,全国信息学奥林匹克竞赛)是由中国计算机学会主办,是中国最具影响力的计算机竞赛之一。

NOI 的目标是选拔和培养高中生的计算机科学和算法设计能力,培养具有国际竞争力的优秀人才。

竞赛设置了一系列挑战性的编程题目,考察参赛者的算法思维、编程实践和问题解决能力。

下面是一道NOI竞赛练习题,希望能帮助读者更好地理解NOI竞赛的题型和要求。

【题目描述】小明是一名NOI竞赛的参赛选手,最近他参加了一场练习赛,其中一道题目让他颇费思量。

题目要求如下:给定一个长度为N的整数序列A,小明需要将序列A分成两个非空的子序列B和C。

子序列B和C的长度可以不相等,但是B和C的元素之和必须相等。

小明希望分割后的B序列的元素尽可能多。

请你帮助小明计算B序列的最大长度。

【输入格式】输入的第一行包含一个整数N,表示序列A的长度。

接下来一行包含N个整数,表示序列A中的元素。

【输出格式】输出一个整数,表示B序列的最大长度。

【样例输入】51 2 3 4 6【样例输出】3【样例解释】序列A为[1, 2, 3, 4, 6],B序列可以为[1, 2, 3],C序列为[4, 6],它们的元素之和均为6,且B序列的长度为3,是可以通过分割得到的最大长度。

【数据范围】对于30%的数据,2 ≤ N ≤ 10,序列A中的元素均为正整数。

对于60%的数据,2 ≤ N ≤ 100,序列A中的元素均为正整数。

对于100%的数据,2 ≤ N ≤ 10^5,序列A中的元素均为正整数。

【解题思路】要求分割后B序列的最大长度,可以使用动态规划的方法进行求解。

令dp[i]表示序列A中前i个数字的和的奇偶性。

在状态转移方程中,我们可以考虑第i个数字A[i]是属于序列B还是序列C。

当A[i]属于序列B时,dp[i]的奇偶性与dp[i-1]相同。

即dp[i] = dp[i-1];当A[i]属于序列C时,dp[i]的奇偶性与dp[i-1]相反。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
$$ $ ??
这样就写出了代码:
string s; while(getline(cin, S)) //读入整行 { cout << S << endl; //输出原串 int left[102],j=0; //left[]记录所有"("在S中的下标,j只是指针 memset(left, -1, sizeof(left)); //初始化-1 for(int i = 0; i < S.size(); i++) //查找 { if(S[i] == '(') //找到"(" { left[j++] = i; //记录下标 S[i] = '$'; //假设该括号未匹配 }
((ABCD(x) )(rttyy())sss)(
((ABCD(x) $$ )(rttyy())sss)( ? ?$
问题分析
本题大致意思就是,对给定的多个字符 串,输出其中无法匹配的括号标记(左括号 “$”,右括号“?”),其他字符输出空格,且 位置严格按照原串。 所以最重要的就是找出无法匹配的括号 并标记。
问题描述
在某个字符串(长度不超过100)中有 左括号、右括号和大小写字母;规定(与常 见的算数式子一样)任何一个左括号都从内 到外与在它右边且距离最近的右括号匹配。 写一个程序,找到无法匹配的左括号和右括 号,输出原来字符串,并在下一行标出不能 匹配的括号。不能匹配的左括号用“$”标注, 不能匹配的右括号用“?”标注。
else if(S[i] == ')') //找到")" { if(left[j] >= 0) //有匹配的左括号,下标不为-1 { S[left[j]] = S[i] = ' '; //设空 j--; //找上一个左括号 } else S[i] = '?'; //未匹配 } else S[i] = ' '; //其他字符设空 } cout << S << endl; //输出(已修改后的S) }
问题分析
那么,如何找呢? 首先要清楚什么是匹配。题目说,任何 一个左括号都从内到外与在它右边且距离最 近的右括号匹配。 下图中,相同颜色的括号匹配。
((aa())a)bb)) ??
问题分析
很容易想到,可以假设一开始查找到的 “(”无法匹配,设为“$”,并记录下它的下标 。其他字符直接设为空格。 如此,直到查找到“)”,访问它和离它最 近的“(”的下标,在原串中设为空格。 当然,如果找到的“(”下标是一个不可能 的值,例如-1,则该“)”无法匹配,在原串中 设为“?”。 ((aa())a)bb))
对吗?
如果“(”下标从left[0]开始存储,当第 一个“(”匹配完后,j = -1,就会出现下标 越界!!! 只要修改一句: left[j++] = i; left[++j] = i;
完成。
本算法时间复杂度O(n)
本题相当于普及组1~2题难度
Thanks for watching.
By yjp
输入
输入包括多组数据,每组数据一行,包 含一个字符串,只包含左右括号和大小写字 母,字符串长度不超过100
输出
对每组输出数据,输出两行,第一行包 含原始输入字符,第二行由"$",""和空格组 成,"$"和"?"表示与之对应的左括号和右括 号不能匹配。
Sample input
Sample output
相关文档
最新文档