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!
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++
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.
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; } |