Solução: Problema do professor de matemática caxias (Diogo Maron)

From AdonaiMedrado.Pro.Br
Jump to: navigation, search

Dificuldade 1

#include <stdio.h>
#include <string.h>
 
main()
{
	char palavra[201];
	scanf("%s",palavra);
	while (strcmp(palavra, "0") != 0)
	{
		int i, len;
		int abreParentese = 0;
		len = strlen(palavra);
		for (i = 0; i < len; i++)
		{
			if (palavra[i] == '(')
				abreParentese++;
			else if (palavra[i] == ')')
			{
				if (abreParentese > 0)
					abreParentese--;
				else
				{
					// Incorreto
					abreParentese = -1;
					break;
				}
			}
		}
		// Resultado
		if (abreParentese == 0)
			printf("%d\n", 1);
		else
			printf("%d\n", 0);
		scanf("%s",palavra);
	}
}


Dificuldade 2

#include <stdio.h>
#include <string.h>
 
main()
{
	char palavra[201];
	scanf("%s",palavra);
	while (strcmp(palavra, "0") != 0)
	{
		int i, len;
		int valido = 1;
		int abreChave = 0, abreParentese = 0, abreCochete = 0;
		int fechaChave, fechaCochete;
		len = strlen(palavra);
		for (i = 0; i < len; i++)
		{
			switch (palavra[i]) 
			{
				case '{':
					if ((abreParentese > 0) || (abreCochete > 0))
						valido = 0;
					else
						abreChave++;
					fechaChave = 0;
					break;
				case '}':
					if ((abreChave == 0) || (fechaChave == 0))
						valido = 0;
					else
						abreChave--;
					if (abreChave > 0)
						fechaChave = 1;
					break;
				case '[':
					if (abreCochete > 0)
						valido = 0;
					else
						abreCochete++;
					fechaChave = 1;
					fechaCochete = 0;
					break;
				case ']':
					if ((abreCochete == 0) || (fechaCochete == 0))
						valido = 0;
					else
						abreCochete--;
					break;
				case '(':
					if (abreParentese > 0)
						valido = 0;
					else
						abreParentese++;
					fechaCochete = 1;
					break;
				case ')':
					if (abreParentese == 0)
						valido = 0;
					else
						abreParentese--;
					break;
			}
			if (valido == 0)
				break;
		}
		if ((abreChave > 0) || (abreParentese > 0) || (abreCochete > 0))
			valido = 0;
		// Resultado
		printf("%d\n", valido);
		// Nova entrada
		scanf("%s",palavra);
	}
}