(0.5) Um sistema de eleição prevê 2 turnos. No segundo turno são classificados 3 candidatos. A escolha do eleito só acontece se o total de votos daquele candidato for superior à soma dos votos dos outros 2 candidatos. Você deve fazer um programa em Python que leia o nome dos 3 candidatos e o número de votos de cada um deles e informar qual candidato foi eleito (se a condição for satisfeita) ou informar que deverá haver nova eleição.

Passo 1

O enunciado diz o seguinte:
  • Há uma eleição em dois turnos; no segundo turno há exatamente ...3... candidatos classificados.
  • Cada candidato tem um nome (string) e recebeu um certo número de votos (um número inteiro).
  • A regra para eleger é: um candidato é eleito somente se o número de votos desse candidato for estritamente maior que a soma dos votos dos outros ...2... candidatos. Em símbolos, para um candidato i com v_i votos, ele é eleito se e somente se
v_i > v_j + v_k
onde v_j e v_k são os votos dos outros dois candidatos.
  • O programa deve ler os nomes e os votos dos ...3... candidatos e informar qual candidato foi eleito (se a condição acima for satisfeita) ou informar que deverá haver nova eleição.
Informações dadas que usaremos:
  • nomes dos ...3... candidatos (uma string por candidato);
  • número de votos de cada candidato (um inteiro não-negativo por candidato).
O que o programa deve entregar:
  • o nome do candidato eleito, se existir um que satisfaça a condição;
  • caso contrário, uma mensagem indicando que deverá haver nova eleição.

Passo 2

Como vamos ler os dados: vou assumir um formato simples e robusto para a entrada (isso precisa estar claro no programa):
  • para cada candidato, o programa lê primeiro uma linha com o nome (pode conter espaços) e em seguida outra linha com o número de votos (um inteiro). Ou seja, serão lidas ...6... linhas no total: nome1, votos1, nome2, votos2, nome3, votos3.
Justificativa da escolha: esse formato evita problemas com nomes que contêm espaços e é fácil de implementar com a função built-in \texttt{input()} do Python.

Passo 3

Tipos de dados e funções básicas que usaremos:
  • \texttt{input()} retorna uma string com o conteúdo da linha lida.
  • Para transformar a string de votos em inteiro usamos \texttt{int()}.
  • Guardamos cada candidato como um par (\text{nome}, \text{votos}).
  • Em Python, soma de valores é feita com \texttt{+} e soma de elementos de uma lista pode ser feita com \texttt{sum(lista)}.
  • Comparação estrita “maior que” é feita com o operador \texttt{>}. A condição de eleição que precisamos testar, escrita em Python para um candidato i, é equivalente a verificar se
v_i > v_j + v_k
onde v_i é um inteiro.
Exemplo numérico simples (didático):
  • Suponha votos ...10..., ...4..., ...3.... Para o candidato com ...10... votos verificamos se 10 > 4 + 3. Como 10 > 7 é verdade, esse candidato seria eleito.

Passo 4

Algoritmo passo a passo (em linguagem natural):
  1. Ler \text{nome}_1 e \text{votos}_1.
  2. Ler \text{nome}_2 e \text{votos}_2.
  3. Ler \text{nome}_3 e \text{votos}_3.
  4. Para cada candidato i (dos ...3...):
    • calcular a soma dos votos dos outros dois candidatos, S = v_j + v_k;
    • verificar se v_i > S.
    • se a condição for verdadeira, esse candidato é eleito; imprimir o nome e terminar.
  5. Se nenhum candidato satisfizer a condição, imprimir que deverá haver nova eleição.
Por que esse algoritmo é suficiente e eficiente:
  • Há só ...3... candidatos; testar cada um custa pouco trabalho computacional.
  • A desigualdade estrita garante que, se existir um candidato eleito, ele é único. (Uma explicação curta: se v_a > v_b + v_c, então v_a > v_b e v_a > v_c, logo nenhum dos outros pode ter votos maiores que a soma dos outros dois ao mesmo tempo.)

Passo 5

Detalhes de implementação em Python (linha a linha, com explicação do que cada parte faz):
  • Lemos nomes com \texttt{input().strip()} para eliminar espaços extras nas extremidades.
  • Lemos votos com \texttt{int(input().strip())} para converter a string para inteiro.
  • Guardamos os pares em uma lista \texttt{candidatos = [(nome1, votos1), (nome2, votos2), (nome3, votos3)]}.
  • Iteramos com um laço \texttt{for i, (nome, votos) in enumerate(candidatos):}.
  • Calculamos \texttt{soma_outros = sum(v for j, (n, v) in enumerate(candidatos) if j != i)}.
  • Testamos \texttt{if votos > soma_outros:}. Se verdadeiro, imprimimos \texttt{Eleito: <nome>} e saímos.
  • Se acabar o laço sem achar eleito, imprimimos \texttt{Deve haver nova eleição}çã.

Passo 6

Casos especiais e observações práticas:
  • Se algum número de votos for negativo ou não for inteiro, a conversão \texttt{int()} dará erro; em um cenário de prova, normalmente assume-se que as entradas são válidas (inteiros não-negativos).
  • Se dois ou mais candidatos tiverem a mesma quantidade de votos, a desigualdade estrita \texttt{>} não é satisfeita, então não haverá eleito (logo, nova eleição).
  • Como estamos testando a condição estrita, não elegemos em caso de igualdade (por exemplo, v_i = v_j + v_k não é suficiente).

Passo 7

Vou agora fornecer o programa Python completo, pronto para ser usado com o formato de entrada que descrevi (para cada candidato: uma linha com o nome, seguida de uma linha com o número de votos).

Resposta

# Leitura dos 3 candidatos: para cada um, uma linha com o nome e a próxima linha com os votos (inteiro).
nome1 = input().strip()
votos1 = int(input().strip())
nome2 = input().strip()
votos2 = int(input().strip())
nome3 = input().strip()
votos3 = int(input().strip())

candidatos = [(nome1, votos1), (nome2, votos2), (nome3, votos3)]

eleito = None
for i, (nome, votos) in enumerate(candidatos):
    soma_outros = sum(v for j, (n, v) in enumerate(candidatos) if j != i)
    if votos > soma_outros:
        eleito = nome
        break

if eleito is not None:
    print(f"Eleito: {eleito}")
else:
    print("Deve haver nova eleição")

Exercícios relacionados