1203:扩号匹配问题

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 7154     通过数: 3817

【题目描述】

在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注。

【输入】

输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100。

【输出】

对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,"$"和"?"表示与之对应的左括号和右括号不能匹配。

【输入样例】

((ABCD(x)
)(rttyy())sss)(

【输出样例】

((ABCD(x)
$$
)(rttyy())sss)(
?            ?$

【分析】

这道题放到递归专题中,的确很难想,可以思考,扫描字符串,遇到左括号'('标记'$',遇到右括号')',则向前查找'$',找到标记为空格,找不到标记问号'?'。

【参考代码1】

#include <stdio.h>
#include <string.h>
#define N 110
char a[N],b[N];
int find_brace(int index)
{if(index<0)return index;else if(b[index]=='$')return index;elsereturn find_brace(index-1);
}
int main()
{int i,m,n;while(gets(a)!=NULL){n=strlen(a);memset(b,' ',sizeof(b));for(i=0;i<n;i++){if(a[i]=='(')b[i]='$';else if(a[i]==')'){m=find_brace(i-1);if(m==-1)b[i]='?';else{b[m]=' ';b[i]=' ';}}}puts(a);puts(b);memset(a,' ',sizeof(a));}return 0;
}

事实上,可以用C++的STL模板中的stack(栈)实现。

【参考代码2】

#include<iostream>
#include <stack>
const int N=110;using namespace std;string a;
char b[N];
stack <int> s;
int main()
{while(getline(cin,a)){int len=a.size();for(int i=0;i<len;i++){if(a[i]=='('){s.push(i);b[i]=' ';}else if(a[i]==')'){if(!s.empty()){s.pop();b[i]=' ';}elseb[i]='?';}elseb[i]=' ';}while(!s.empty())   //栈不为空{b[s.top()]='$';s.pop();}b[len]='\0';cout<< a << endl;cout<< b << endl;}return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1203

信息学奥赛一本通(1203:扩号匹配问题)相关推荐

  1. 信息学奥赛一本通 1203:扩号匹配问题 | OpenJudge 2.2 2705:扩号匹配问题

    [题目链接] ybt 1203:扩号匹配问题 OpenJudge 2.2 2705:扩号匹配问题 [题目考点] 1. 递归 2. 栈 [解题思路] 解法1:递归 设sign字符数组,各元素初始值都是空 ...

  2. 信息学奥赛一本通 1354:括弧匹配检验

    [题目链接] ybt 1354:括弧匹配检验 [题目考点] 1. 栈 [解题思路] 遍历字符串,左括号入栈,遇到右括号时,看栈顶括号与右括号是否能配对.如果两个括号都是小括号或中括号,那么二者配对,左 ...

  3. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  4. 信息学奥赛一本通超详细题解,动画图文题解

    内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...

  5. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  6. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  7. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

  8. 信息学奥赛一本通 1358:中缀表达式值(expr)

    [题目链接] ybt 1358:中缀表达式值(expr) [题目考点] 1. 表达式求值 中缀表达式转后缀表达式 后缀表达式求值 [解题思路] 由于题目要求做中缀表达式转为后缀表达式,而后求值.那么这 ...

  9. 信息学奥赛一本通C++语言-----1120:同行列对角线的格

    [题目描述] 输入三个自然数nn,ii,j(1≤i≤n,1≤j≤n)j(1≤i≤n,1≤j≤n),输出在一个n×nn×n格的棋盘中(行列均从11开始编号),与格子(ii,jj)同行.同列.同一对角线的 ...

最新文章

  1. 线性表的链式表示——循环链表
  2. java窗口坐标_如何在Java中获取窗口外部的鼠标单击坐标
  3. 【正一专栏】我的高考作文——在广州的乡下生活
  4. PyOpenCL图像处理:Box模糊
  5. 自定义注解,aop实现注解锁
  6. (转)WCF教程系列(1)-创建第一个WCF程序
  7. 2023届春招实习拉钩一面凉经
  8. 前端开发框架整理(一些记录给自己看的)
  9. 7923 consoleconsumer 怎么关闭_英雄联盟手游怎么设置最好 LOL手游最佳设置攻略_英雄联盟手游...
  10. 225.队列实现栈 (力扣leetcode) 博主可答疑该问题
  11. WordPress资源源码网站源码下载/整站打包【带1200数据】
  12. NXP JN5169 ZigBee 3.0开发环境搭建
  13. 圣诞节,教你用Python给微信头像添加一个圣诞帽
  14. 【读书笔记】 - 《你只是看起来很努力》
  15. 手把手教学--Python爬取有道词典
  16. 函数式编程(JAVA)——Stream流
  17. opensuse安装face_recognition全记录
  18. 机器人的自述作文_机器人的自述作文
  19. java版 我的世界 win10_我的世界win10版
  20. JdbcTemplate DateTime转java.util.Date时区错误

热门文章

  1. SilverLight MD5加密
  2. 50年后的地球什么样?大数据、AI、量子计算的书单给你答案
  3. 8个应用案例告诉你,机器学习都能做什么?
  4. java循环标号_java 标号 break 自循环
  5. 3天撸了一套SpringBoot+Dubbo+Sentinel秒杀系统,爽!
  6. 我向面试官讲解了单例模式,他对我竖起了大拇指
  7. “钉钉打卡神器”开发者被判五年半!
  8. 程序写不好,总理当到老!
  9. JEECG商业版本授权说明(仅限企业用户)
  10. json对象合并的方法