萌新求解
  • 板块学术版
  • 楼主钺Programmer
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/8/15 15:28
  • 上次更新2023/11/4 10:35:30
查看原帖
萌新求解
153141
钺Programmer楼主2021/8/15 15:28

不久前图灵杯的C题括号匹配,一开始我是用getchar()将大括号一个个读入,然后就《西江月·夜行黄沙道中》了。后来改成scanf('%s',s)的形式直接一次性输入,A了。两种方式本地样例测试都是对的,想问一下各位大佬是为什么会出问题。


括号匹配原代码:

#include<bits/stdc++.h>
using namespace std;
int n,p;
stack<int> ss;
int main(){
	cin>>n>>p;
	getchar();
	for(int i=1;i<=n;++i){
		char c=getchar();
		if(c=='{'){
			ss.push(i);
		}
		if(c=='}'){
			if(ss.empty()){
				continue;
			}
			if(i==p){
				cout<<ss.top();
				break;
			}
			if(ss.top()==p){
				cout<<i;
				break;
			}
			ss.pop();
		}
	}
	return 0;
}

修改后代码:

#include<bits/stdc++.h>
using namespace std;
int n,p;
stack<int> ss;
char s[100010];
int main(){
	cin>>n>>p;
	scanf("%s",s+1);
	for(int i=1;i<=n;++i){
		char c=s[i];
		if(c=='{'){
			ss.push(i);
		}
		if(c=='}'){
			if(ss.empty()){
				continue;
			}
			if(i==p){
				cout<<ss.top();
				break;
			}
			if(ss.top()==p){
				cout<<i;
				break;
			}
			ss.pop();
		}
	}
	return 0;
}
2021/8/15 15:28
加载中...