Pesquisar este blog

Livros Recomendados

quinta-feira, 1 de outubro de 2020

URI (BEECROWD) - 1581 - Conversa Internacional - Strings - C e C++

Novidade! Chego aqui com um post novo para vocês! São três soluções, duas em C++ e uma em C para o problema Conversa Internacional. Veja abaixo!

Plataforma: URI (BEECROWD)

Problema
1581

Enunciado:
Rafael recentemente recebeu uma bolsa de estudos e está fazendo intercâmbio fora do Brasil, onde conheceu várias pessoas de várias nacionalidades diferentes. O idioma nativo desse país é o Inglês, e todas as pessoas que Rafael conheceu falam inglês como primeira ou segunda língua. Como aprender um segundo idioma é uma tarefa difícil e cansativa, as pessoas preferem falar seu idioma nativo sempre que possível. Uma exceção à essa regra é quando há duas pessoas no grupo que não tem o mesmo idioma nativo. Nesse tipo de situação, o idioma utilizado é o inglês. Por exemplo, se em um grupo há só brasileiros, o idioma falado será o português, mas caso haja um espanhol entre os brasileiros, o idioma falado será o inglês. Rafael as vezes fica confuso sobre qual idioma deveria ser falado em cada grupo de pessoas, e para isso pediu sua ajuda.

Linguagens: C e C++

Solução:

Código em C:

Lê-se todos os valores e testa-se comparando o primeiro com todos os subsequentes, contando a quantidade de idiomas iguais. A comparação é feita com strcmp.  Se iguais for diferente de k significa que há alguém que não fala o mesmo idioma (pelo menos uma pessoa). Então deve retornar inglês, caso contrário retorna o idioma que se repetiu por todos (ele estará tanto em str1 quanto em str2).

#include <stdio.h>
#include <string.h>
int main() {
    int n, k, i, iguais;
    char str1[1000], str2[1000];
    scanf("%d", &n);
    while (n--) {
        scanf("%d ", &k);
        scanf("%[^\n] ", str1);
        iguais = 1;
        for (i = 0; i < k-1; i++) {
            scanf("%[^\n] ", str2);
            if (!strcmp(str1, str2)) {
                strcpy(str1, str2);
                iguais++;
            }
        }
        if (iguais != k)
            printf("ingles\n");
        else
            printf("%s\n", str2);
    }
    return 0;
}

Código em C++:

A lógica da solução é a mesma, a diferença são os métodos específicos do C++ para chegar à resposta e o operador ternário na saída.

#include <iostream>
#include <string>
using namespace std;
int main() {
    int n, k, i, iguais;
    string str1, str2;
    cin >> n;
    while (n--) {
        cin >> k;
        cin.ignore();
        getline(cin, str1);
        iguais = 1;
        for (i = 0; i < k-1; i++) {
            getline(cin, str2);
            if (!str1.compare(str2)) {
                str1 = str2;
                iguais++;
            }
        }
        cout << (iguais != k? "ingles" : str2) << endl;
    }
    return 0;
}

Solução alternativa em C++:
A primeira string lida é armazenada em uma variável str1. Todas as demais são comparadas com ela, caso alguma seja diferente, então a flag inglês é acionada e o resultado final será inglês. Caso nenhuma seja igual a inglês, então o resultado final é a str1, uma vez que todas as strings são iguais.


 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
#include <iostream>
 
using namespace std;


int main() {
 int n, num;
 cin >> n;
 while(n--){
  cin >> num;
  string new_str, str1;
  bool ingles = false;
  for(int i=0;i< num;i++){
   cin >> new_str;
   if(i==0) str1 = new_str;
   else{
    if(new_str != str1){
     ingles = true;
    }
   }
  }
  if(ingles) cout << "ingles" << endl;
  else cout << str1 << 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