2242 - Huaauhahhuahau

Esse problema é uma mentira, todo o mundo sabe que huehuehue é a risada mais engraçada que tem.

Descrição

Solução

Você pode tomar dois passos simples para resolver este problema:

  1. Tirar todas as letras que não são vogais da risada original, ficando com uma nova risada agora apenas com as vogais;

  2. Você pode comparar a risada com vogais com uma versão da risada das vogais, só que invertida. Neste caso, se as duas risadas, a normal e a invertida, forem iguais, então imprimir S, senão imprimir N.

Se preferir, você pode fazer o passo 2 fazendo um for que vai do começo até a metade comparando a primeira letra com a última, a segunda com a penúltima, a terceira com a antipenúltima e assim sucessivamente. Na minha implementação em C eu inclusive ignorei o primeiro passo completamente, usando um artifício de que eu só comparo letras se ambas forem vogais e ignorando as consoantes presentes.

#include <string.h>
#include <stdio.h>

int vogal(char letra){
    switch(letra){
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':   return 1;
        default:    return 0;
    }
}

int main(){
    int i, f;
    int engracada;
    char risada[51];

    scanf("%s", &risada);

    i = 0;
    f = strlen(risada) - 1;
    engracada = 1;
    while(i < f){
        if(vogal(risada[i]) && vogal(risada[f])){
            if(risada[i] != risada[f]){
                engracada = 0;
                break;
            }
            ++i;
            --f;
        }else{
            if(!vogal(risada[i]))   ++i;
            if(!vogal(risada[f]))   --f;
        }
    }

    printf("%c\n", engracada ? 'S' : 'N');

    return 0;
}

Last updated