提示:
這是一篇良心博客,
在這里,你會看到所有你可能踩到的坑,
所以,作者用這個方式來掩飾自己超蒻……
踩坑路程
一眼看過去,水題一個!隨手寫了這么一個代碼:
#include <bits/stdc++.h>
int main(){
char c;
int flag = 0;
while(c = getchar()&& c != '@'){
if(c == '(')flag++;
else if(c == ')') flag --;
}
std::cout << !flag?"YES":"NO";
}
結果:

(艸測評機你不打臉會死啊喂)
然后,改為do-while:
#include <bits/stdc++.h>
int main(){
char c;
int flag = 0;
do{
c = getchar();
if(c == '(')flag++;
else if(c == ')') flag --;
}while(c != '@');
std::cout << !flag?"YES":"NO";
}

再 次 吐 血
再次思考,考慮到:)(這種匹配方式,那么加個特判:
#include <bits/stdc++.h>
int main(){
char c;
int flag = 0,i = 0;
do{
c = getchar();
if(!i && c == ')'){std::cout << "NO";return 0;}
if(c == '(')flag++;
if(c == ')') flag --;
i++;
}while(c != '@');
std::cout << !flag?"YES":"NO";
}

再 次 吐 血
無奈下載了一個資料看了下……
艸!還有一個\n!
再次修改代碼:
#include <bits/stdc++.h>
int main(){
char c;
int flag = 0,i = 0;
do{
c = getchar();
if(!i && c == ')'){std::cout << "NO" << '\n';return 0;}
if(c == '(')flag++;
if(c == ')') flag --;
i++;
}while(c != '@');
std::cout << (!flag?"YES":"NO") << '\n';
}

我…………
再次點開一個資料:
(a*2*3+1*2+3)+(3*2)+(1*2))1*1(@
^ ^
哦哦哦還有個特判!結尾'('的情況!
再次修改:
#include <bits/stdc++.h>
int main(){
char c = ' ',before;
int flag = 0,i = 0;
do{
before = c;
c = getchar();
if(!i && c == ')'){std::cout << "NO" << '\n';return 0;}
if(c == '(')flag++;
if(c == ')') flag --;
if(before == '(' && c == '@'){std::cout << "NO" << '\n';return 0;}
i++;
}while(c != '@');
std::cout << (!flag?"YES":"NO") << '\n';
}

還有?!再次點開資料:
(0)*(2+2)*)3+4((3+10)@
看到這個資料,我突然發現問題就在我的思路上,考慮不到)(這個情況,
但是能不能順著我的思路繼續做呢?完 全 可 以,
考慮到如果出現)(的話,會出現:
flag = 0
c = ) flag-- -> flag = -1
^^
負數!那么修改一下:
#include <bits/stdc++.h>
int main(){
char c = ' ',before;
int flag = 0,i = 0;
do{
before = c;
c = getchar();
if(!i && c == ')'){std::cout << "NO" << '\n';return 0;}
if(c == '(')flag++;
if(c == ')')flag--;
if(flag < 0){std::cout << "NO" << '\n';return 0;}
if(before == '(' && c == '@'){std::cout << "NO" << '\n';return 0;}
i++;
}while(c != '@');
std::cout << (!flag?"YES":"NO") << '\n';
}

坑的總結
- 沒看到換行
(結尾的特判沒注意)(的情況flag依然等于0導致錯誤
留個贊再走會死嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/43005.html
標籤:C++
下一篇:STL之stack
