7-9 Jack cheng的烦恼2

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;
}

你可能感兴趣的:(PTA)