Pesquisar este blog

Livros Recomendados

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

URI (BEECROWD) - 3039 - Brinquedos do Papai Noel - Iniciante - C e C++

Nesse post eu trago a solução do problema Brinquedos do Papai Noel, do BEECROWD. Dá pra fazer de algumas formas diferentes. Veja na sequência do post como eu obtive aceite nas linguagens de programação C e C++. Boa leitura!

Plataforma: URI (BEECROWD)

Problema3039


Linguagens: C e C++


Solução:

Mais um exercício que resolvi aplicando a mesma lógica em C e C++. A ideia que pensei foi a seguinte: lê todos os dados e verfica se o último caractere da linha é 'F', ou seja, o caractere da posição tamanho-1. Sempre que for 'F', incrementa a variável bonecas. Isso é suficiente, pois tendo o total de crianças e o número de 'F', sabemos também quantos 'M' são, é claro, assumindo que as entradas de dados respeitam a premissa de informar só 'F' ou 'M'.

Código em C:

Para resolver em C, dessa vez o que fiz de diferente foi criar um ponteiro para char (criancas) com alocação de 256 vees o tamanho de um char, assim o ponteiro apontará para um texto com no máximo este tamanho. Outro ponto interessante é o uso do '\0', que é o caractere zero. Este caractere é normalmente usado como terminador de string, portanto, quando obtém-se '\0' é porque chegou ao final da cadeia de caracteres.

#include <stdio.h>

int main() {
    
    int numCriancas, i = 0, bonecas = 0;
    
    scanf("%d ", &numCriancas);
    
    while (i++ < numCriancas) {
        
        char *criancas = (char *) malloc(sizeof(char) * 256);
        int tamanho = 0;
        int j = 0;
        
        gets(criancas);
        
        while (criancas[j++] != '\0')
            tamanho++;
        
        if (criancas[tamanho-1] == 'F') bonecas++;
        
    }
    
    printf("%i carrinhos\n%i bonecas\n", numCriancas - bonecas, bonecas);
    
    return 0;
}

Código em C++:

Solução bastante parecida com a de C. Na verdade, a lógica aplicada foi a mesma, muda apenas a forma de fazer algumas coisas. Por exemplo, não usei ponteiro de char com alocação via malloc, mas apenas declarei criancas como string. Os comandos de entrada (std::cin) e saída (std::cout) também são diferentes.

#include <iostream>

using namespace std;

int main() {
    
    int numCriancas, i = 0, bonecas = 0;
    
    cin >> numCriancas;
    cin.ignore();
    
    while (i++ < numCriancas) {
        
        string criancas;
        int tamanho = 0;
        int j = 0;
        
        getline(cin, criancas);
        
        while (criancas[j++] != '\0')
            tamanho++;
        
        if (criancas[tamanho-1] == 'F') bonecas++;
        
    }
    
    cout << numCriancas - bonecas << " carrinhos" << endl;
    cout << bonecas << " bonecas" << 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