Solução: Problema do professor de matemática caxias (Diogo Maron)
From AdonaiMedrado.Pro.Br
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); } }