首页 > 编程语言 >南沙C++信奥老师解一本通题:1203:扩号匹配问题

南沙C++信奥老师解一本通题:1203:扩号匹配问题

时间:2024-09-11 08:55:15浏览次数:8  
标签:输出 信奥 int 扩号 括号 flag 1203 字符串 匹配

【题目描述】

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

【输入】

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

【输出】

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

【输入样例】

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

【输出样例】

((ABCD(x)
$$
)(rttyy())sss)(
?            ?$
#include <bits/stdc++.h>
using namespace std;
int a[200];  //a[i]=1  左括号不匹配 a[i]=-1 右括号不匹配 
void match(string s,int n)
{
	if(s=="")
		return;
	if(s[0]=='(')
		a[n]=1;			
	else if(s[0]==')') //清除最近的左括号 
	{
		bool flag=false; 		//查找最近的一个左括号位置
		for(int i=n-1;i>=0;i--)
		{
			if(a[i]==1)
			{
				a[i]=0;
				flag=true;
				break;//跳出循环,只需要匹配一个左括号就行了 
			}
		}
		if(!flag) //否则没有左括号,自己有不配的右括号 
			a[n]=-1;
	}
	match(s.substr(1),n+1);
}
int main()
{
	string s;
	while(cin>>s)
	{
		memset(a,0,sizeof(a));  
		cout<<s<<endl;     //注原文要先输原先字符串 
		match(s,0);	
		for(int i=0;i<s.size();i++)
		{
			if(a[i]>0)
				cout<<"$";
			else if(a[i]<0)
				cout<<"?";
			else cout<<" ";
		}
		cout<<endl;
	}
	return 0;
}

 

标签:输出,信奥,int,扩号,括号,flag,1203,字符串,匹配
From: https://www.cnblogs.com/nanshaquxinaosai/p/18407599

相关文章

  • 信奥一本通题陈老师解题:1209:分数求和
    ​【题目描述】【输入】第一行是一个整数nn,表示分数个数,1≤n≤101≤n≤10;接下来nn行,每行一个分数,用"p/qp/q"的形式表示,不含空格,p,qp,q均不超过1010。【输出】输出只有一行,即最终结果的最简形式。若为分数,用"p/qp/q"的形式表示。【输入样例】21/21/3【输出样例】5/......
  • 信奥OJ的搭建
     第一步,服务器申请选择一:免费云服务器,免费虚拟主机如:阿贝云阿贝云提供了免费的云服务器和免费的云虚拟主机,可根据自己的实际应用情况选择。首先注册一个账户,然后需要支付0.3元做一个实名认证,如果实名认证成功了大概率会开通成功。如果失败了可能是服务器资源池......
  • 南沙信奥赛C++陈老师解一本通题: 1326:【例7.5】 取余运算(mod)
    ​【题目描述】【输入】输入b,p,k的值。【输出】【输入样例】2109【输出样例】2^10mod9=7 #include<iostream>#include<stdlib.h>usingnamespacestd;longlongb,p,k,ans=1;intmain(){ cin>>b>>p>>k; for(inti=1;i<=p;i++) { ans*=b;......
  • 南沙信奥赛C++陈老师解一本通题: 1171:大整数的因子
    ​ 【题目描述】已知正整数k满足2≤k≤9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。【输入】一个非负整数c,c的位数≤30。【输出】若存在满足 c%k==0的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。【输入样......
  • 信奥赛C++老师解一本通题:1182:合影效果
    ​【题目描述】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?【输入】第一行是人数nn(2≤n≤......
  • 信奥赛C++老师解一本通题:1938:【07NOIP普及组】奖学金
    ​【题目描述】某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排......
  • 信奥赛C++老师解一本通题: 1180:分数线划定
    ​ 【题目描述】世博会志愿者的选拔工作正在A市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m×150%(向下取整)名的选手......
  • 南沙信奥赛家教老师解题:1249:Lake Counting
    ​ 【题目描述】题意:有一块N×M的土地,雨后积起了水,有水标记为‘W’,干燥为‘.’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?【输入】第一行为N,M(1≤N,M≤110)。下面为N*M的土地示意图。【输出】一行,共有的水洼数。【输入样例】1012W..............
  • 南沙信奥赛C++陈老师解一本通题:1341:【例题】一笔画问题
    ​ 题目描述】如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行dfs,时间复杂度为O(m+n),m为边数,n是点数。【输入】第一行n,m,有n个点,m条......
  • 打卡信奥刷题(696)用Scratch图形化工具信奥B3922[普及组/提高] [GESP202312 一级] 小杨
    [GESP202312一级]小杨报数题目描述小杨需要从111到NNN报数......