O maior ímpar no fim
Imagine que nós temos uma lista de números armazenada na memória.
Por exemplo,
>
L
L
1 2 cdots <br> 11 9 12 14 6 15 21 1 4 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
1 2 cdots
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
L = [11,;9,;12,;14,;6,;15,;21,;1,;4,;2]
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.

Passo 2

Primeiro, vamos percorrer a lista e descobrir qual é o maior ímpar.
  1. Criar uma variável maior_impar (inicialmente None, pra dizer “ainda não achei nenhum ímpar”).
  2. Criar outra idx_maior (índice do maior ímpar achado).
  3. Passar por cada elemento x da lista (usando um for i, x in enumerate(L):).
  4. Dentro do laço, testar se x é ímpar, ou seja, x%2 neq 0
  5. Se for ímpar e (maior_impar ainda não definido ou x > maior_impar), atualiza maior_impar = x e idx_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):
  1. Se maior_impar for None, significa que não tinha ímpar na lista e a gente não faz nada.
  2. Caso contrário, removemos o elemento da posição idx_maior com L.pop(idx_maior).
  3. 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

Exemplo de uso:

L = [11, 9, 12, 14, 6, 15, 21, 1, 4, 2]
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):

Exercícios relacionados