Pesquisar este blog

Livros Recomendados

segunda-feira, 15 de fevereiro de 2021

URI (BEECROWD) - 1533 - Detetive Watson - Ad-Hoc - C e C++

Fala, pessoal! Resolvi outro problema Ad-hoc! Este é o exercício "Detetive Watson". Consegui o aceite na primeira tentativa, o que foi bem gratificante. Aí está a solução, espero que faça sentido para vocês! Conta aí nos comentários se a sua ficou diferente! Um abração e até a próxima!!!

Plataforma: URI (BEECROWD) 

Problema1533

Enunciado:

John Watson, mesmo após anos trabalhando ao lado de Sherlock Holmes, nunca conseguiu entender como ele consegue descobrir quem é o assassino com tanta facilidade. Em uma certa noite, porém, Sherlock bebeu mais do que devia e acabou contando o segredo a John. 

“Elementar, meu caro Watson”, disse Sherlock Holmes. “Nunca é o mais suspeito, mas sim o segundo mais suspeito”. Após descobrir o segredo, John decidiu resolver um crime por conta própria, só para testar se aquilo fazia sentido ou se era apenas conversa de bêbado.

Dada uma lista com N inteiros, representando o quanto cada pessoa é suspeita, ajude John Watson a decidir quem é o assassino, de acordo com o método citado.


Linguagens: C e C++


Solução:

Após ler todos os valores, obtenho o maior valor e a posição dele, ou seja, pego o elemento mais suspeito. Depois disso, dou o valor -1 a ele, assim ele será menor que todos os outros, pois todos valores informados são positivos. Refaço a iteração para obter o maior valor e sua posição, ou seja, o segundo maior valor originalmente informado. Basta imprimir a sua posição!

Os dois códigos abaixo são semelhantes e diferem apenas no uso de comandos de I/O próprios de C e C++.

Código em C:

#include <stdio.h>
int main(){
	int n, numeros[1000], i, maiorPosicao, maior;
	while (1) {
        scanf("%d", &n);
        if (n == 0)
            break;
        
        for (i = 0; i < n; i++) 
            scanf("%d", &numeros[i]);

        maiorPosicao = 0;
        maior = numeros[0];
        for (i = 1; i < n; i++) {
            if (numeros[i] > maior) {
                maior = numeros[i];
                maiorPosicao = i;
            }
        }
        
        numeros[maiorPosicao] = -1;
        maiorPosicao = 1;
        maior = numeros[0];
        for (i = 1; i < n; i++) {
            if (numeros[i] > maior) {
                maior = numeros[i];
                maiorPosicao = i + 1;
            }
        }
                
        printf("%d\n", maiorPosicao);
	}
	
	return 0;
}

Código em C++:

#include <iostream>

using namespace std;

int main() {

   int n, numeros[1000], i, maiorPosicao, maior;
   while (1) {
      cin >> n;
      if (n == 0)
         break;
        
      for (i = 0; i < n; i++) 
         cin >> numeros[i];

      maiorPosicao = 0;
      maior = numeros[0];
      for (i = 1; i < n; i++) {
         if (numeros[i] > maior) {
            maior = numeros[i];
            maiorPosicao = i;
         }
      }
        
      numeros[maiorPosicao] = -1;
      maiorPosicao = 1;
      maior = numeros[0];
      for (i = 1; i < n; i++) {
         if (numeros[i] > maior) {
            maior = numeros[i];
            maiorPosicao = i + 1;
         }
      }
      cout << maiorPosicao << 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