欢迎大家加入ACM!
要深入的学习ACM的相关知识,首先就必须学会一门编程语言,推荐C/C++。
不过对于初学者,因为没编过多少代码,经常出现变异错误,其实就是语法错误。
现在要你检查一段代码的语法是否否正确。
为了简化问题,我们只检查 (、)、{、} 括号是否匹配了,并且在输入的代码中不包含字符的'(',')','{','}'。
其他语法错误不检查,如 "#include <stdio.h","2 = x",是错误的,但是不检查。
Input
有多组测试数据,每组测试数据有一段代码,该段代码可能在有多行。
每段代码以Ctrl+Z结束。
处理到文件结束。
Output
每组测试数据输出一行。
如果这段代码括号匹配了,输出 Right ,否则输出 Wrong。
Sample Input
#include <stdio.h
int main(){
int a b;
while (scanf("%d%d", &a, &b) != EOF) {
printf("%d\n", a + b);
}
}
Ctrl+Z
int main(){
int a, b;
while (scanf("%d%d", &a, &b) != EOF) {
printf("%d\n", a + b);
}
Ctrl+Z
'{', '}'不能再‘(’ ,‘)’之间,且遍历一遍‘{’要>='}',而且每组数据中‘{’,‘}’相等。
()中不能有{或},所以只需出现{,}时(的个数==)的个数,并且总个数相等即可。
#include<stdio.h>
#include<string.h>
int main()
{
int len;char cmp[10]="Ctrl+Z";
char s[1000];int ss[1000]={0};
while(scanf("%s",s)!=EOF){
memset(ss,0,sizeof(ss));
int a=0; int nn=0,mm=0;
while(1){
len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]=='('){
ss[a]=1;a++;
}
if(s[i]==')'){
ss[a]=2;a++;
}
if(s[i]=='{'){
ss[a]=3;a++;nn++;
}
if(s[i]=='}'){
ss[a]=4;a++;mm++;
}
}
gets(s);
if(memcmp(s,cmp,6)==0){
break;
}
}
int judge=1;int ss1=0,ss2=0;
for(int i=0;i<1000;i++){
if(ss[i]!=1&&ss[i]!=2&&ss[i]!=3&&ss[i]!=4){
break;
}
if(ss[i]==1){
ss1++;
}
if(ss[i]==2){
ss2++;
}
if(ss[i]==3||ss[i]==4){
if(ss1!=ss2){
printf("Wrong\n");
goto R;
}
}
}
if(nn==mm&&ss1==ss2){
printf("Right\n");
}
else{
printf("Wrong\n");
}
R:
continue;
}
return 0;
}