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)
Problema: 3039
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; }
#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; }