17 solutions
-
5
交第三遍了,感谢叶哥教我怎么交两段代码 这题两种思路,第一种不用栈
#include<stdio.h> #include<cstring> using namespace std; const int N=300; int l;//用一个l来记录前括号 char a[N];//可以像钟哥那样用字符 int flag=0; int main(){ int t=0; while(scanf("%c",&a[t])){ if(a[t]=='@')break; t++; } int n=strlen(a); for(int i=0;i<n;i++){ if(a[i]=='(')l++;// 如果是前括号就++ if(a[i]==')')l--;// 如果是后括号就-- if(l<0){ // 如果l为负了说明这个后括号前面没有前括号匹配 ,这题直接计数显然是不对的,但我看到有人这样水过了,谢老师也讲了')('的问题,大概是数据有点问题(doge) printf("NO"); flag=1; break; } } if(flag==0&&l==0)printf("YES"); if(flag==0&&l>0)printf("NO");//注意考虑完全部情况 return 0; }
第二种用栈,思路差不多就不贴注释了
#include<stdio.h> #include<stack> using namespace std; const int N=300; char a; int flag=0; int main(){ stack<char>st; while(scanf("%c",&a)&&a!='@'){ if(a=='('){ st.push(a); } if(a==')'){ if(st.empty()){ printf("NO"); flag=1; break; } else st.pop(); } } if(flag==0&&st.empty())printf("YES"); if(flag==0&&!st.empty())printf("NO"); return 0; }
-
2
仅供参考
#include<bits/stdc++.h> using namespace std; char num[1005]; int main() { std::ios::sync_with_stdio(false); cin>>num; stack<char> st; for(int i=0;num[i]!='@';i++) { if(num[i]=='(') st.push(num[i]); if(num[i]==')') { if(!st.empty())//如果栈非空 st.pop(); else{ st.push('(');//如果是空的,就加一个然后直接break break; } } } if(!st.empty())//判断栈是否是空的 cout<<"NO"; else cout<<"YES";//是空的才符合 return 0; }
-
2
仅供参考,写的一般
#include <bits/stdc++.h> using namespace std; stack<char>s; int main(){ char k; while(cin>>k&&k!='@'){//输入 if(k=='('){ s.push(k); } else if(k==')'){ if((!s.empty())&&s.top()=='('){//如果配对就删除头部 s.pop(); }//否则不配对,则直接结束 else{ cout<<"NO"; return 0; } } }//判断是否有剩下没配对的 if(s.empty()){ cout<<"YES"; } else cout<<"NO"; return 0; }
-
1
简单写一下
#include<bits/stdc++.h> using namespace std; stack<char> s; int main() { char ch; int flag=0; while(cin>>ch){ if(ch=='@')break; else if(ch=='(')s.push(ch); else if(ch==')'&&!s.empty())s.pop(); else if(ch==')'&&s.empty()){ flag=1; break; } } if(!flag&&s.empty())cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; }
-
1
模板题,仅供参考
#include <bits/stdc++.h> using namespace std; int main() { stack <char> s; char c; while(cin>>c&&c!='@') { if(c=='(') { s.push(c); } else if(c==')') { if(s.empty()) { cout<<"NO"; return 0; } else { s.pop(); } } } if(s.empty()) { cout<<"YES"; } else cout<<"NO"; return 0; }
-
1
#include <bits/stdc++.h> using namespace std; int main() { int cnt1=0,cnt2=0; string s; getline(cin,s); for(int i=0; i<s.size(); i++) { if(s[i] == '(') cnt1++; else if(s[i] == ')') cnt2++; if(cnt2 > cnt1)//注意第一个括号是 ) 如果是就直接NO { cout << "NO"; return 0; } } if(cnt1 == cnt2)cout << "YES"; else cout << "NO"; return 0; }
-
0
#include<bits/stdc++.h> using namespace std; char a[305]; stack<int> S; int main(){ for(int i=1;i<=305;i++){ cin>>a[i]; if(a[i]=='@'){ break; } if(a[i]=='('){ S.push(a[i]); } if(a[i]==')'&&S.empty()==0){ S.pop(); continue; } if(a[i]==')'&&S.empty()!=0){ cout<<"NO"; return 0; } } if(S.empty()){ cout<<"YES"; } else{ cout<<"NO"; } return 0; }
-
0
#include<bits/stdc++.h> using namespace std; stack <int> st; string t; int main() { cin>>t; int len = t.size(); int flag = 0; for(int i=0;i<len;i++){ if(t[i] == '('){ st.push(t[i]); } else if(t[i] == ')'){ if(st.empty()){ flag = 1;break; } else{ if(t[i] == ')' && st.top() == '(') st.pop(); } } } if(st.size() || flag){ cout<<"NO"; } else{ cout<<"YES"; } return 0; }
-
0
#include<bits/stdc++.h> using namespace std; char a[300]; int n1=0,n2=0;//判断左括号和右括号数量是否相等 int main(){ scanf("%s",a); stackstk; for(int i=0;a[i]!='@';i++){ if(a[i]'('){ stk.push(i); n1++; } if(a[i]')')n2++; if(!stk.empty()){ if(a[i]')')stk.pop(); } } if(stk.empty()&&(n1n2))printf("YES"); else printf("NO"); return 0; }
-
0
#include <iostream> #include <cstring> using namespace std; int main() { int count=0,su=0; char a[1001]; fgets(a,1001,stdin); for(int i=0;i<strlen(a);i++) { if(a[i]=='(') count++; if(a[i]==')') su++; if(count<su) { cout<<"NO"<<endl; return 0; } } if(count==su) cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; }
-
0
#include<bits/stdc++.h> using namespace std; stack<char> S; int main(){ char x; while(cin>>x){ if(x=='@'){ break; } else if(x=='('){ S.push(1); } else if(x==')'){ if(!S.empty()&&S.top()==1){ S.pop(); } else{ S.push(-1); } } } if(!S.empty()){ printf("NO"); } else{ printf("YES"); } return 0; }
-
0
日常蒟蒻确认
#include<bits/stdc++.h> using namespace std; int main() { char wuhu[2000]; stack<char> s; cin>>wuhu; for(int i=0;wuhu[i]!='@';i++) { if(wuhu[i]=='(') { s.push(wuhu[i]);//放栈里 } else if(wuhu[i]==')') { if(!s.empty())//栈不空说明有'(' { s.pop();//配对啦出来吧你 } else//空了 好吧重开 { cout<<"NO"; return 0;//这里还是看了大佬 } } } if(!s.empty())//再看看栈空不空 cout<<"NO"; else cout<<"YES"; return 0; }
-
0
#include<stdio.h> #include<string.h> int main() { char arr[225]; int left = 0; scanf("%s",arr); for(int i = 0;i<strlen(arr);i++){ if(arr[i]=='('){ left++; } if(arr[i]==')'){ if(left==0){ printf("NO"); left-=1; break; } else{ left--; } } } if(left==0)printf("YES"); else if(left>0)printf("NO"); return 0; }
-
0
#include<bits/stdc++.h> typedef long long ll; using namespace std; char s[100010]; int main() { int flage=0; stack<char>q; cin>>s; for(int i=0;i<strlen(s);i++) { if(s[i]=='('||s[i]==')') { if(flage==0)//判断栈是否为空; { q.push(s[i]); flage=1; } else if((s[i]=='('&&q.top()==')')||(s[i]==')'&&q.top()=='(')) { q.pop(); if(q.empty()) flage=0; } else q.push(s[i]); } } if(q.empty()) cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; }
- 1
Information
- ID
- 289
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 5
- Tags
- # Submissions
- 234
- Accepted
- 87
- Uploaded By