Pesquisar este blog

Livros Recomendados

terça-feira, 23 de março de 2021

URI (BEECROWD) - 2949 - A Sociedade do Anel - Iniciante - C e C++

Mais um exercício de nível iniciante sendo resolvido e disponibilizado para vocês! O exercício A Sociedade do Anel trabalha basicamente a leitura de cadeias de caracteres e estruturas condicionais. Eu usei switch, tanto em C quanto em C++! Veja na sequência desse post.

Plataforma: URI (BEECROWD)

Problema2949


Linguagens: C e C++


Solução:

Ler n e as n linhas (cadeias de caracteres) e testar o último caractere. Isso é útil porque é este caractere que vai informar se é anão, elfo, mago etc. Todos os outros caracteres anteriores não importam. O nome da pessoa não importa, precisamos apenas contar o seu tipo de raça no contador correto. Eu fiz isso tanto em C quanto em C++ utilizando switch case, mas você pode fazer com ifs aninhados.

No fim, basta imprimir o contador de cada tipo de raça com a mensagem solicitada no exercício, sem esquecer da quebra de linha.

Código em C:

Em C eu resolvi criando um array de char e obtendo a posição tamanho-2, assim não pega o terminador de string e vai exatamente ao último caractere informado pelo usuário em cada linha. A leitura da linha foi feita com fgets.

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

int main() {
    
    char palavra[256];
    int n, ca = 0, ce = 0, ch = 0, cm = 0, cx = 0;
    
    scanf("%d", &n);
    while (n--) {
        fgets(palavra, 256, stdin);
        switch (palavra[strlen(palavra)-2]) {
        	case 'A':
        		ca++;
        		break;
        	case 'E':
        		ce++;
        		break;
        	case 'H':
        		ch++;
        		break;
        	case 'M':
        		cm++;
        		break;
        	default:
        		cx++;
        		break;        		        		        		        		        		
        }
    }
    printf("%d Hobbit(s)\n%d Humano(s)\n%d Elfo(s)\n%d Anao(s)\n%d Mago(s)\n", cx, ch, ce, ca, cm);

    return 0;
}

Código em C++:

Poucas diferença sem relação ao código em C. A lógica é a mesma, mudam apenas o tipo da palavra, já que em C criei um array de char e aqui posso usar direto string. 

Usa-se cin.ignore() para, como diz o nome, ignorar caracteres do buffer de entrada (por exemplo, quebra de linha). A leitura é feita com getline e, para acessar o último caractere, usa-se como índice o valor de palavra.length()-1.

#include <iostream>
#include <cstring>

using namespace std;
int main() {
    
    string palavra;
    int n, ca = 0, ce = 0, ch = 0, cm = 0, cx = 0;
    
    cin >> n;
    cin.ignore();
    while (n--) {
        getline(cin, palavra);
        switch (palavra.at(palavra.length()-1)) {
        	case 'A':
        		ca++;
        		break;
        	case 'E':
        		ce++;
        		break;
        	case 'H':
        		ch++;
        		break;
        	case 'M':
        		cm++;
        		break;
        	default:
        		cx++;
        		break;        		        		        		        		        		
        }
    }
    cout << cx << " Hobbit(s)" << endl << ch << " Humano(s)" << endl << ce << " Elfo(s)" << endl << ca << " Anao(s)" << endl << cm << " Mago(s)" << endl;

    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