Jackcheng刚入初中时成绩是相当棒的,尤其令老师们感到惊奇的这孩子会编程。殊不知随着堕入游戏的魔道之中,Jackcheng仅有的编程知识不仅毫无长进,而且大大退化了。 这天他的数学老师突然了有了一个吃惊的想法,想通过促进学生们进行一些编程知识的学习,锻炼他们的逻辑能力,让学生们更好的学习math 。 因此他想起了Jackcheng 。 Jackcheng真的慌了 , 他不得不又向你求救了。
下面是他向你发的电子邮件:
大神: 急需大神帮忙啊。 帮我写一个程序吧。
问题描述: 括号匹配 对输入的括号串进行判断是否遵循数学上的括号的使用原则。
例如: (()) true ; ())( false ;
我们这里括号仅仅包括 () 和 {} 两种。
输入格式:
第一行给出n(n > 0 && n < 100000) , 代表输入的括号数量。接下来一行进行括号的输入。。
输出格式:
对输入的括号进行判断, 如果遵循数学上括号的使用原则,输出True , 否则输出False。
输入样例:
6
()}{()
输出样例:
False
题目思路:
设两个数存储(和{,初始为0,出现)和}让这两个数分别减1,出现负数直接break输出False
代码:
#include
#include
#include
int main(){
char str[100005];
int n;
while(scanf("%d",&n)!=EOF){
scanf("%s",str);
int count1 = 0; //存储(
int count2 = 0;//存储{
int flag = 0;
if(n % 2 != 0){ //奇数直接出来就行
printf("False\n");
continue;
}
else{
for(int i = 0;i < strlen(str);i++){
if(str[i] == '('){
count1++;
continue;
}
if(str[i] == ')'){
count1--;
if(count1 < 0){
flag = 1; //如果出现负数记录一下,然后break
break;
}
continue;
}
if(str[i] == '{'){
count2++;
continue;
}
if(str[i] == '}'){
count2--;
if(count2 < 0){
flag = 1; //如果出现负数记录一下,然后break
break;
}
continue;
}
}
}
if(flag == 1){
printf("False\n");
}
else{
printf("True\n");
}
}
return 0;
}