Pesquisar este blog

Livros Recomendados

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

sexta-feira, 5 de fevereiro de 2021

URI (BEECROWD) - 1332 - Um-Dois-Três - Strings - C e C++

Mais um exercício da categoria Strings! O exercício "Um-Dois-Três" foi resolvido em C e C++. São duas soluções em C++ disponibilizadas para vocês. Contem nos comentários se as soluções de vocês forem diferentes!

Plataforma: URI (BEECROWD)

Problema1332

Enunciado:
Seu irmão mais novo aprendeu a escrever apenas um, dois e três, em Inglês. Ele escreveu muitas dessas palavras em um papel e a sua tarefa é reconhecê-las. Nota-se que o seu irmão mais novo é apenas uma criança, então ele pode fazer pequenos erros: para cada palavra, pode haver, no máximo, uma letra errada. O comprimento de palavra é sempre correto. É garantido que cada palavra que ele escreveu é em letras minúsculas, e cada palavra que ele escreveu tem uma interpretação única.

Linguagens: C e C++


Solução: 

Código em C:

É necessário ler a palavra informada e verificar se está escrito "one", "two" ou "three". No entanto, as palavras estão escritas com algum erro. Assim, para verificar se a palavra seria three, basta analisar o tamanho da entrada, pois three é a única entrada com tamanho 5. Se não for, testo se as letras são, em ordem, "o", "n", "e", formando a palavra "one". Se duas ou mais letras forem diferentes, é sinal de que a palavra informada não seria "one", pois para ser deveria ter somente um erro. Então a resposta seria 2. Em caso contrário a resposta é 1, que já é o caso base aqui.

#include <stdio.h>

int main() {
    
    int n;
    char *palavra = (char *) malloc(sizeof(char) * 5);
    
    scanf("%d ", &n);
    
    while (n--) {
        
        int erros = 0;
        int indice = 0;
        int resposta = 1;
        int tamanho = 0;
        
        scanf("%s", palavra);    

        while (palavra[indice++] != '\0')
            tamanho++;
        
        if (tamanho == 5)
            resposta = 3;
        else {
            if (palavra[0] != 'o') erros++;
            if (palavra[1] != 'n') erros++;
            if (palavra[2] != 'e') erros++;
            if (erros >= 2) resposta = 2;
        }   
        
        printf("%i\n", resposta);
        
    }
    return 0;
}

Código em C++:

Esta solução segue a mesma lógica da solução acima.

#include <iostream>
#include <string>

using namespace std;

int main() {
    
    int n;
    
    cin >> n;
    
    while (n--) {

        int erros = 0;
        int indice = 0;
        int resposta = 1;
        int tamanho = 0;
        string palavra;
        
        cin >> palavra;
        
        while (palavra[indice++] != '\0')
            tamanho++;
        
        if (tamanho == 5)
            resposta = 3;
        else {
            if (palavra[0] != 'o') erros++;
            if (palavra[1] != 'n') erros++;
            if (palavra[2] != 'e') erros++;
            if (erros >= 2) resposta = 2;
        }
        
        cout << resposta << endl;
        
    }
    return 0;
}

Solução alternativa em C++:

Primeiramente a solução verifica se a palavra lida tem apenas 5 letras. Neste caso, obviamente a resposta é 3. Caso contrário, é comparado letra a letra com as palavra "one" e "two", somando quando as letras são iguais nas respectivas variáveis. Se one tiver mais casos de acerto, então é impresso 1, caso contrário é impresso 2.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
using namespace std;
 
int main() {
 
  int n;
  cin >> n;
  while(n--){
   string word;
   cin >> word;
   if(word.length() == 5){
   cout << 3 << endl;
  } else{
    int one = 0;
    int two = 0;
   if(word[0] == 'o') one++;
   if(word[1] == 'n') one++;
   if(word[2] == 'e') one++;
   if(word[0] == 't') two++;
   if(word[1] == 'w') two++;
   if(word[2] == 'o') two++;
   if(one > two) cout << 1 << endl;
   else cout << 2 << endl;
  }

  }
 
    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