問、括弧ばかりからなる記号列が正しい形になっているかどうかを調べたい。括弧には、小括弧 ( )、中括弧 { }、大括弧 [ ] がある。それぞれの括弧は、その開き記号と閉じ記号とが対応していなければならない。正確にいうと、括弧ばかりからなる記号列が与えられとき、つぎの操作を可能な限り繰り返すことでその記号列が空となるならば、その記号列は正しいという。
( と ) がこの順に隣り合って並んでいるなら、共に取り除く。
{ と } がこの順に隣り合って並んでいるなら、共に取り除く。
[ と ] がこの順に隣り合って並んでいるなら、共に取り除く。
入力に与えられた括弧ばかりからなる記号列が正しいなら correct と1行に出力し、正しくなければ wrong と1行に出力するプログラムを作れ。
なお出力の末尾には改行を書き出すこと。
入力例1
({()[]}[{()()((()))}])({}[])
出力例1
correct
入力例2
({()[]][([{}[]])}{()())(())}({}[])
出力例2
です。
以外書いたコードなのですが、初心者でもありよくわからない部分やへんな部分が多いと思います。どなたかわかる方いらっしゃれば手直しなどしていただけるとありがたいです。よろしくお願いします。
//#include <string.h>
//#include <stdio.h>
int main(void) {
char s[10000]; scanf("%s", s); int c1 = 0,c2 = 0,c3=0,c4=0,c5=0,c6=0; int i; for(i=0;i<10000;i++) { if(s[i]==')') { c1++; if(c1>c2) break; continue; }else if(s[i]=='(') { c2++; continue; }else if(s[i]=='}') { c3++; if(c3>c4) break; continue; }else if(s[i]=='{') { c4++; continue; }else if(s[i]==']') { c5++; continue; if(c5>c6) break; }else if(s[i]=='[') { c6++; continue; } } if((c1>c2 || c3>c4 || c5>c6) || (c1<c2 || c3<c4 || c5<c6)) printf("wrong\n"); if(c1==c2 && c3==c4 && c5==c6) printf("correct\n"); return 0;
}
回答4件
あなたの回答
tips
プレビュー