O maior ímpar no fim
Imagine que nós temos uma lista de números armazenada na memória.
Por exemplo,
Imagine que nós temos uma lista de números armazenada na memória.
Por exemplo,
> | |
---|---|
L | |
L | |
1 2
|
A tarefa consiste em
Mover o maior elemento ímpar para a última posição da lista sem alterar a ordem dos demais elementos
No exemplo acima, isso nos daria
L
No exemplo acima, isso nos daria
L
1 | 2 |
|
|||||||
---|---|---|---|---|---|---|---|---|---|
11 | 9 | 12 | 14 | 6 | 15 | 1 | 4 | 2 | 21 |
Apresente um programa que realiza essa tarefa.
Passo 1
Beleza, o enunciado diz o seguinte: a gente tem uma lista de números, tipo
e a missão é “pegar o maior número ímpar” dessa lista e jogar ele lá no fim, sem bagunçar a ordem dos outros.
Conteúdo envolvido: listas (vetores), laço de repetição, teste de paridade, remoção e inserção em lista.
Conteúdo envolvido: listas (vetores), laço de repetição, teste de paridade, remoção e inserção em lista.
Passo 2
Primeiro, vamos percorrer a lista e descobrir qual é o maior ímpar.
- Criar uma variável
maior_impar
(inicialmenteNone
, pra dizer “ainda não achei nenhum ímpar”). - Criar outra
idx_maior
(índice do maior ímpar achado). - Passar por cada elemento
x
da lista (usando umfor i, x in enumerate(L):
). - Dentro do laço, testar se
é ímpar, ou seja, - Se for ímpar e (
maior_impar
ainda não definido oumaior_impar
), atualizamaior_impar = x
eidx_maior = i
.
Passo 3
Depois que terminamos o laço, ou seja, já sabemos qual é o
maior_impar
e seu idx_maior
(se houver pelo menos um ímpar):- Se
maior_impar
forNone
, significa que não tinha ímpar na lista e a gente não faz nada. - Caso contrário, removemos o elemento da posição
idx_maior
comL.pop(idx_maior)
. - E aí colocamos esse valor no final usando
L.append(maior_impar)
.
Passo 4
Pronto! A lista original agora tem o mesmo conteúdo, só que aquele maior ímpar foi para a última posição.
Passo 5
maior_impar = None
idx_maior = -1
for i, x in enumerate(L):
if x % 2 != 0: # testa se é ímpar
if maior_impar is None or x > maior_impar:
maior_impar = x
idx_maior = i
# Se achou um ímpar, remove e insere no fim
if maior_impar is not None:
L.pop(idx_maior)
L.append(maior_impar)
return L
idx_maior = -1
for i, x in enumerate(L):
if x % 2 != 0: # testa se é ímpar
if maior_impar is None or x > maior_impar:
maior_impar = x
idx_maior = i
# Se achou um ímpar, remove e insere no fim
if maior_impar is not None:
L.pop(idx_maior)
L.append(maior_impar)
return L
Exemplo de uso:
L = [11, 9, 12, 14, 6, 15, 21, 1, 4, 2]
print(move_maior_impar_para_fim(L))
print(move_maior_impar_para_fim(L))
Saída: [11, 9, 12, 14, 6, 15, 1, 4, 2, 21]
Resposta
Segue o programa em Python que faz isso:
def move_maior_impar_para_fim(L):