Corvo Contador resolvido e postado pra vocês! Espero que as soluções aqui oferecidas sejam úteis :) Valeu!
Plataforma: URI (BEECROWD)
Problema: 1848
Enunciado:
Como se sabe, existe um corvo com três olhos. O que não se sabia é que o corvo com três olhos pode prever o resultado da loteria de Westeros. Enquanto todos os outros corvos coletam as apostas, o corvo de três olhos já sabe o resultado, e quando Bran sonha com o corvo, o corvo conta o resultado. O problema é que Bran apesar de lembrar do sonho, não consegue interpretá-lo sozinho em tempo hábil. A sua tarefa é fazer um programa para interpretar o sonho de Bran e calcular o resultado da loteria. Durante o sonho, o corvo pisca diversas vezes e grita apenas 3 vezes. A cada grito um número do resultado da loteria é calculado. Cada piscada do corvo comunica um número em binário. Um olho aberto significa 1 e um olho fechado significa 0. O olho da esquerda é o mais significativo e o da direita é o menos significativo. A cada piscada, este número deve ser somado, e quando o corvo grita, essa soma é um resultado.
Linguagens: C e C++
Solução:
Código em C:
Aqui testei se "linha" recebia caw (na verdade, testei apenas o primeiro caractere, assumindo que as entradas estariam dentro do padrão -- o correto seria comparar a string inteira). Neste caso era só imprimir o acumulador e zerá-lo. Caso não fosse "caw", seria necessário testar os caracteres e saber se são asteriscos para incrementar o acumulador com valores em potência de base 2. O valor mais à direita vale 2^0, ou um, depois 2^1, ou dois, depois 2^2, ou quatro. Era só acumular este valor.
#include <stdio.h> #include <string.h> int main() { int acumulador = 0; char *linha = (char *) malloc(sizeof(char) * 8); while (gets(linha) != NULL) { if (linha[0] == 'c') { printf("%i\n", acumulador); acumulador = 0; } else { if (linha[0] == '*') acumulador += 4; if (linha[1] == '*') acumulador += 2; if (linha[2] == '*') acumulador++; } } return 0; }
Código em C++:
Aqui segui uma lógica parecida, mas testei a string inteira, não apenas o primeiro caractere (a letra 'c').
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> #include <string> using namespace std; int main() { string str; int sum = 0; while(cin >> str){ if(str=="caw"){ cin >> str; cout << sum << endl; sum = 0; } else{ if(str[0]=='*') sum = sum+4; if(str[1]=='*') sum = sum+2; if(str[2]=='*') sum = sum+1; } } return 0; } |
Solução alternativa em C++:
Solução com a mesma lógica que a do código em C.
#include <iostream> using namespace std; int main() { int acumulador = 0; string linha; while (getline(cin, linha)) { if (linha[0] == 'c') { cout << acumulador << endl; acumulador = 0; } else { if (linha[0] == '*') acumulador += 4; if (linha[1] == '*') acumulador += 2; if (linha[2] == '*') acumulador++; } } return 0; }
Nenhum comentário:
Postar um comentário