Pesquisar este blog

Livros Recomendados

domingo, 21 de março de 2021

URI (BEECROWD) - 2850 - Papagaio Poliglota - Iniciante - C e C++

Papagaio Poliglota é mais um problema easy do BEECROWD! Ele foi categorizado como um problema de iniciante. De fato é bem simples de resolver. Na sequência do post estão as respostas nas duas linguagens que mais costumo postar.

Plataforma: URI (BEECROWD)

Problema2850

Linguagens: C e C++


Solução:

A ideia aqui é ler uma palavra e verificar se é "esquerda", "direita", "nenhuma" ou "as duas" para fornecer uma resposta diferente em cada caso. Por questões de simplicidade (e preguiça), assumi que o usuário sempre informará uma dessas respostas e consigo notar que todas elas têm algo mais simples que as diferencia: a letra inicial. Então em vez de comparar se o texto é "esquerda", por exemplo, eu acabo pegando só o caractere inicial e comparando se é 'e'. Assim não percorro todo texto e, consequentemente, consigo um algoritmo mais rápido. É possível resolver comparando todo texto, inclusive é a solução mais correta, mas assumindo aqui que somente aquelas quatro entradas serão informadas, o programa funciona perfeitamente. Utilizei switch case para escolher o caractere inicial e criei cada caso comparando a letra inicial. O caso "as duas" seria representado por case 'a', mas não foi necessário pois eu acrescentei esta opção direto na cláusula default.

Código em C:

Utilizei ponteiro de char (*palavra) para alocar caracteres, li a palavra até encontrar o \n e selecionei palavra[0], ou seja, a letra presente na primeira posição da palavra, para verificar se ela é 'e', 'd', 'n' ou caso contrário ('a') para imprimir a respectiva mensagem.

#include <stdio.h>

int main() {
    
    char *palavra = (char *) malloc(sizeof(char) * 8);
 
    while (scanf(" %[^\n]", palavra) != EOF) {
        
        switch(palavra[0]) {
            case 'e': printf("ingles\n"); break;
            case 'd': printf("frances\n"); break;
            case 'n': printf("portugues\n"); break;
            default: printf("caiu\n"); break;
        }
    
    }

    return 0;
}

Código em C++:

Mesma coisa do código acima mas usando string em vez de char *palavra com malloc. e lendo com getline.

Não esqueça das quebras de linha!!!!

#include <iostream>

int main() {
    
    std::string palavra;
 
    while (getline(std::cin, palavra)) {
        
        switch(palavra[0]) {
            case 'e': std::cout << "ingles" << std::endl; break;
            case 'd': std::cout << "frances" << std::endl; break;
            case 'n': std::cout << "portugues" << std::endl; break;
            default: std::cout << "caiu" << std::endl; break;
        }
    
    }

    return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas