括號匹配這是個很簡單的題目,如果只有小括號,就模擬進棧和出棧的過程就行了:
注:輸入時'@'作為結束標志
#include <stdio.h> int main() { freopen("stack.in","r",stdin); freopen("stack.out","w",stdout); int in=0; char s[256]; scanf("%s",&s); int i=0; while(s[i]!='@') { if(s[i]=='(') in++; if(s[i]==')') in--; if(in<0) break; i++; } if(in==0) printf("YES"); else printf("NO"); return 0; }
樣例輸入1:2*(x+y)/(1-x)@
樣例輸出1:YES
樣例輸入2:(25+x)*(a*(a+b+b)@
樣例輸出2:NO
至於多括號,就需要創建一個棧了:
輸入無需@做結尾
#include <stdio.h> #include <string.h> char stack[256]; int top=0; void push(char c) { top++;stack[top]=c; } int pop() { top--;return(stack[top+1]); } int main() { freopen("check.in","r",stdin); freopen("check.out","w",stdout); char s[256]; gets(s); int lenofs=strlen(s); int i; char c; for(i=0;i<=lenofs-1;i++) { if(s[i]=='(') { push('('); } if(s[i]==')') { push(')'); c=stack[top-1]; if(c=='(') { pop();pop(); } } if(s[i]=='[') { push('['); } if(s[i]==']') { push(']'); c=stack[top-1]; if(c=='[') { pop();pop(); } } if(top<0) break; } if(top==0) printf("OK"); else printf("Wrong"); return 0; }
