5 条题解
-
45
表达式括号匹配
==思路==
根据题意,可以使用栈解决,flag标记是否满足条件,初始化为1。循环输入新的字符,有三个特殊情况需要特殊处理:
情况1:如果当前字符是'@',结束循环。
情况2:如果当前字符是'('、'['、'{',将当前字符进栈。
情况3:如果当前字符是')'、']'、'}',如果栈顶是和c配对左括号,则栈顶出栈, 否则说明不匹配,flag赋值0,并且结束循环。
最后如果flag为1并且栈中没有元素,说明整个是匹配的,输出“YES”,否则输出“NO”==参考代码==
#include <iostream> #include <string> #include <stack> using namespace std; char c; stack<char> s; bool flag = 1; int main() { while(true) { cin >> c; if (c == '@') break; if (c == '(' || c == '[' || c == '{') { s.push(c); } if (c == ')') { if (s.top() == '(') s.pop(); else { flag = 0; break; } } if (c == ']') { if (s.top() == '[') s.pop(); else { flag = 0; break; } } if (c == '}') { if (s.top() == '{') s.pop(); else { flag = 0; break; } } } if (flag == 1 && s.size() == 0) cout << "YES"; else cout << "NO"; return 0; }
点赞再抱走~~~
-
6
思路
根据题意,可以使用栈解决定义字符型数组stk,top记录stk的栈顶,flag标记是否满足条件,初始化为1。循环输入新的字符,有三个特殊情况需要特殊处理:
情况1:如果当前字符是'@',结束循环。
情况2:如果当前字符是'('、'['、'{',将当前字符进栈,top++且stk[top]赋值为c。
情况3:如果当前字符是')'、']'、'}',如果栈顶是和c配对左括号,则栈顶出栈,top--,否则说明不匹配,flag赋值0,并且结束循环。
最后如果flag为1并且栈中没有元素,说明整个是匹配的,输出“YES”,否则输出“NO”代码
#include<iostream> #include<string> using namespace std; char stk[51], c; int top = 0; bool flag = 1; int main() { do { cin >> c; if (c == '@') break; if (c == '(' || c == '[' || c == '{') { top++; stk[top] = c; } if (c == ')') { if (stk[top] == '(') top--; else { flag = 0; break; } } if (c == ']') { if (stk[top] == '[') top--; else { flag = 0; break; } } if (c == '}') { if (stk[top] == '{') top--; else { flag = 0; break; } } }while (1); if (flag == 1 && top == 0) cout << "YES"; else cout << "NO"; }
-
1
Ac代码,请勿抄袭👍
很简单
#include<bits/stdc++.h> using namespace std; char c,s[266]; int t=0; bool f=1; int main() { while(1){ cin>>c; if(c=='@')break; if(c=='('||c=='['||c=='{'){ t++; s[t]=c; } if(c==')'){ if(s[t]=='(')t--; else { f=0; break; } } if(c==']'){ if(s[t]=='[')t--; else { f=0; break; } } if(c=='}'){ if(s[t]=='{')t--; else { f=0; break; } } } if(f && t==0)cout<<"YES"; else cout<<"NO"; return 0; }
-
-4
#include <iostream> #include <string> #include <stack> using namespace std; char c; stack<char> s; bool flag = 1; int main() { while(true) { cin >> c; if (c == '@') break; if (c == '(' || c == '[' || c == '{') { s.push(c); } if (c == ')') { if (s.top() == '(') s.pop(); else { flag = 0; break; } } if (c == ']') { if (s.top() == '[') s.pop(); else { flag = 0; break; } } if (c == '}') { if (s.top() == '{') s.pop(); else { flag = 0; break; } } } if (flag == 1 && s.size() == 0) cout << "YES"; else cout << "NO"; return 0; }
-
-9
表达式括号匹配
==思路==
根据题意,可以使用栈解决,flag标记是否满足条件,初始化为1。循环输入新的字符,有三个特殊情况需要特殊处理: 情况1:如果当前字符是'@',结束循环。 情况2:如果当前字符是'('、'['、'{',将当前字符进栈。 情况3:如果当前字符是')'、']'、'}',如果栈顶是和c配对左括号,则栈顶出栈, 否则说明不匹配,flag赋值0,并且结束循环。 最后如果flag为1并且栈中没有元素,说明整个是匹配的,输出“YES”,否则输出“NO”
==参考代码==
#include <iostream> #include <string> #include <stack> using namespace std; char c; stack<char> s; bool flag = 1; int main() { while(true) { cin >> c; if (c == '@') break; if (c == '(' || c == '[' || c == '{') { s.push(c); } if (c == ')') { if (s.top() == '(') s.pop(); else { flag = 0; break; } } if (c == ']') { if (s.top() == '[') s.pop(); else { flag = 0; break; } } if (c == '}') { if (s.top() == '{') s.pop(); else { flag = 0; break; } } } if (flag == 1 && s.size() == 0) cout << "YES"; else cout << "NO"; return 0; }
点赞再抱走~~~
- 1
信息
- ID
- 22
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 2697
- 已通过
- 794
- 上传者