Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 2850. Mostrar todas as postagens
Mostrando postagens com marcador 2850. Mostrar todas as postagens

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;
}

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