Plataforma: URI
Problema: 1234
Enunciado:
Uma sentença é chamada de dançante se sua primeira letra for maiúscula e cada letra subsequente for o oposto da letra anterior. Espaços devem ser ignorados ao determinar o case (minúsculo/maiúsculo) de uma letra. Por exemplo, "A b Cd" é uma sentença dançante porque a primeira letra ('A') é maiúscula, a próxima letra ('b') é minúscula, a próxima letra ('C') é maiúscula, e a próxima letra ('d') é minúscula.
Linguagem: C
Solução:
Utilizar uma variável de controle para saber se a letra anterior é uppercase ou não. Se for, verifica a letra atual e, se necessário, passa ela para lowercase (somando 32). Se não for, verifica a letra seguinte e, se necessário, passa ela para uppercase (diminuindo 32). Aplicar esta lógica para todo caractere e imprimi-lo até chegar ao final da palavra.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *palavra = (char *) malloc(sizeof(char) * 51); int indice, upper; while(gets(palavra) != NULL) { upper = 1; indice = 0; while (palavra[indice] != '\0') { if ((palavra[indice] > 64 && palavra[indice] < 91) || (palavra[indice] > 96 && palavra[indice] < 123)) { if (palavra[indice] > 64 && palavra[indice] < 91 && upper) upper = 0; else if (palavra[indice] > 96 && palavra[indice] < 123 && upper == 0) upper = 1; else if (upper) { palavra[indice] -= 32; upper = 0; } else { palavra[indice] += 32; upper = 1; } } printf("%c", palavra[indice]); indice++; } printf("\n"); } return 0; }