O acampamento de férias “Brincando com saúde” está fazendo sua programação para receber as crianças nas próximas férias. A coordenadora resolveu dividir as crianças em grupos, de acordo com a idade:
Grupo Idade
A entre 2 e 4 anos
B entre 5 e 7 anos
C entre 8 e 10 anos
D entre 11 e 13 anos
As crianças serão direcionadas para sítios diferentes, de acordo com o peso em relação à faixa etária a que pertencem. As que estiverem acima do peso da média do seu grupo irão para o sítio “Curtindo a vida”, onde terão alimentação e brincadeiras apropriadas. Os que estiverem com o peso abaixo ou igual à média do seu grupo, irão para o sítio “Divertidamente”.
Faça um programa que receba a quantidade de crianças que irão para o acampamento. Para cada criança, deverá ser informado o nome, a idade e o peso. Essas informações deverão ser salvas em um dicionário. O programa deverá exibir uma lista com os nomes das crianças que irão para o sítio “Curtindo a vida” e outra com os nomes das crianças que irão para o sítio “Divertidamente”.
Entradas:
  1. Quantidade de crianças
  2. Para cada criança, nome, idade e peso (dicionário), na mesma linha.
Saídas:
  1. Listas dos nomes das crianças que irão para o sítio “Curtindo a vida”;
  2. Listas dos nomes das crianças que irão para o sítio “Divertidamente”.

Passo 1

O que o enunciado pede e quais são os dados que temos:
  • Entrada 1: a quantidade de crianças (um número inteiro).
  • Entrada 2: para cada criança, em uma linha, três informações: nome, idade e peso.
  • Saídas: duas listas de nomes:
    • lista com os nomes das crianças que irão para o sítio “Curtindo a vida” (essas são as crianças cujo peso é maior que a média do seu grupo de idade);
    • lista com os nomes das crianças que irão para o sítio “Divertidamente” (essas têm peso menor ou igual à média do seu grupo de idade).
  • Além disso, o enunciado pede explicitamente que as informações de cada criança sejam salvas em um dicionário (ou seja, cada criança deverá ser representada por um dicionário com suas chaves).
Observações importantes que já identifico aqui (sem resolver ainda):
  • Os grupos de idade estão definidos assim:
    • Grupo A: entre 2 e 4 anos (inclusive).
    • Grupo B: entre 5 e 7 anos.
    • Grupo C: entre 8 e 10 anos.
    • Grupo D: entre 11 e 13 anos.
  • Precisamos calcular a média de peso de cada grupo (soma dos pesos no grupo dividido pelo número de crianças do grupo) e comparar cada criança com a média do seu próprio grupo.
  • Se a entrada de nome tiver espaços (ex.: “Ana Maria”), devemos ler a linha inteira e extrair do final os valores idade e peso, juntando o resto como nome.

Passo 2

Estratégia geral e estruturas de dados:
  • Vou usar uma lista chamada criancas para guardar todos os dicionários, onde cada dicionário tem as chaves 'nome', 'idade', 'peso' e 'grupo'.
  • Vou manter também um registro por grupo para calcular médias: para cada grupo (A, B, C, D) guardo a soma dos pesos e a contagem de crianças. Por exemplo:
    • grupo_info = {'A': {'soma': 0.0, 'cont': 0}, 'B': {...}, 'C': {...}, 'D': {...}}
  • Depois de ler todas as crianças, calculo a média de cada grupo como media = soma / cont (quando cont > 0).
  • Por fim, faço uma segunda passagem pela lista criancas e separo os nomes em duas listas:
    • curtindo para aqueles com peso > media_do_grupo,
    • divertidamente para aqueles com peso <= media_do_grupo.
  • Formato de saída: exibir os nomes (um por linha) em duas seções, com um cabeçalho identificando cada sítio.
A vantagem dessa estratégia: só preciso calcular médias uma vez, com duas passagens simples (leitura e classificação).

Passo 3

Como determinar o grupo a partir da idade (regras precisas):
  • Regra para mapear uma idade inteira idade ao grupo:
    • se 2 <= idade <= 4 então grupo = 'A'
    • se 5 <= idade <= 7 então grupo = 'B'
    • se 8 <= idade <= 10 então grupo = 'C'
    • se 11 <= idade <= 13 então grupo = 'D'
    • caso a idade esteja fora desses intervalos (por exemplo menor que 2 ou maior que 13), o enunciado não comenta — nesse programa vamos simplesmente não atribuir grupo (ou ignorar), mas normalmente em provas convém assumir que todas as idades estarão dentro dos intervalos. Vou tratar esses casos com cuidado no código (ignorar ou avisar), mas a lógica principal usa os intervalos acima.

Passo 4

Como ler cada linha de entrada robustamente (nome com espaços e separação correta):
  • A linha de entrada para uma criança pode ter o nome com espaços; por isso não uso split() simples assumindo 3 partes.
  • Leitura robusta:
    • leio a linha inteira com linha = input().strip().
    • divido em tokens: tokens = linha.split().
    • os dois últimos tokens devem ser idade e peso (nessa ordem). Ou seja:
      • idade_str = tokens[-2]
      • peso_str = tokens[-1]
    • o nome será a junção dos tokens anteriores: nome = ' '.join(tokens[:-2])
    • converto idade = int(idade_str) e peso = float(peso_str) — notando que, para aceitar entradas que usem vírgula como separador decimal (ex.: 20,5), basta antes substituir ',' por '.' em peso_str.
  • Isso garante que nomes com espaços sejam lidos corretamente.

Passo 5

Fórmula da média que vamos usar e pequenos lembretes:
  • Para cada grupo, a média do peso é dada por:
    • média = (soma de todos os pesos do grupo) / (número de crianças no grupo)
  • Em notação informal: média = soma / cont
  • Se cont == 0 (grupo vazio), não existe média; nesse caso não há crianças para classificar naquele grupo (logo não produziremos nomes para esse grupo).

Passo 6

Passo a passo do algoritmo (em alto nível), que depois será implementado no código:
  1. Ler n = quantidade de crianças.
  2. Inicializar criancas = [] e grupo_info com soma e cont zerados para A, B, C, D.
  3. Para i de 1 até n:
    • Ler a linha, extrair nome, idade, peso conforme Passo 4.
    • Determinar grupo usando a regra do Passo 3.
    • Criar dicionário child = {'nome': nome, 'idade': idade, 'peso': peso, 'grupo': grupo} e fazer criancas.append(child).
    • Se grupo for válido, atualizar grupo_info[grupo]['soma'] += peso e grupo_info[grupo]['cont'] += 1.
  4. Após ler todas as crianças, calcular grupo_medias onde para cada grupo:
    • se cont > 0 então media = soma / cont
    • caso contrário media = None (ou não existir).
  5. Inicializar curtindo = [] e divertidamente = [].
  6. Para cada child em criancas:
    • pegar g = child['grupo'] e peso = child['peso'].
    • se grupo_medias[g] for None (grupo vazio) então pular (não ocorre na prática se não houver crianças).
    • se peso > grupo_medias[g] então curtindo.append(child['nome'])
    • senão divertidamente.append(child['nome'])
  7. Imprimir as duas listas de nomes com cabeçalhos.

Passo 7

Exemplo pequeno (manual) para fixar a lógica:
  • Suponha 4 crianças:
    1. “Ana”, 3, 16
    2. “Bruno”, 4, 18
    3. “Carlos”, 6, 20
    4. “Dora”, 6, 17
  • Grupos:
    • Ana e Bruno → Grupo A. Pesos A: 16 e 18 → média A = (16+18)/2 = 17.
    • Carlos e Dora → Grupo B. Pesos B: 20 e 17 → média B = (20+17)/2 = 18,5.
  • Classificação:
    • Ana (16) ≤ 17 → Divertidamente.
    • Bruno (18) > 17 → Curtindo a vida.
    • Carlos (20) > 18,5 → Curtindo a vida.
    • Dora (17) ≤ 18,5 → Divertidamente.
  • Resultado esperado:
    • Curtindo a vida: [“Bruno”, “Carlos”]
    • Divertidamente: [“Ana”, “Dora”]

Passo 8

Dicas de implementação para a prova (linguagem Python, sem pular etapas):
  • Lembre de converter tipos: int para idade, float para peso.
  • Antes de converter peso_str para float, fazer peso_str = peso_str.replace(',', '.') para aceitar vírgula decimal.
  • Sempre verifique se tokens tem pelo menos 3 elementos ao ler cada linha; se não tiver, trate como entrada inválida (na prova normalmente as entradas são corretas).
  • Use nomes de variáveis claros: criancas, grupo_info, grupo_medias, curtindo, divertidamente.
  • Ao imprimir, exiba os nomes um por linha sob um cabeçalho. Isso facilita leitura e correção automática.

Passo 9

Agora, o programa completo em Python (pronto para usar em um problema de prova ou exercício). Ele segue exatamente os passos explicados: leitura robusta, dicionários por criança, cálculo de médias por grupo e classificação final.

Resposta

def idade_para_grupo(idade):
    if 2 <= idade <= 4:
        return 'A'
    if 5 <= idade <= 7:
        return 'B'
    if 8 <= idade <= 10:
        return 'C'
    if 11 <= idade <= 13:
        return 'D'
    return None  # idade fora dos intervalos definidos

def main():
    try:
        n = int(input().strip())
    except:
        print("Entrada inválida para a quantidade de crianças.")
        return

    criancas = []
    grupo_info = {
        'A': {'soma': 0.0, 'cont': 0},
        'B': {'soma': 0.0, 'cont': 0},
        'C': {'soma': 0.0, 'cont': 0},
        'D': {'soma': 0.0, 'cont': 0},
    }

    for _ in range(n):
        linha = input().strip()
        tokens = linha.split()
        if len(tokens) < 3:
            # Linha inválida: não tem pelo menos nome, idade e peso
            continue
        idade_str = tokens[-2]
        peso_str = tokens[-1].replace(',', '.')
        nome = ' '.join(tokens[:-2])
        try:
            idade = int(idade_str)
            peso = float(peso_str)
        except:
            # Conversão inválida: pula esta entrada
            continue

        grupo = idade_para_grupo(idade)
        child = {'nome': nome, 'idade': idade, 'peso': peso, 'grupo': grupo}
        criancas.append(child)

        if grupo in grupo_info:
            grupo_info[grupo]['soma'] += peso
            grupo_info[grupo]['cont'] += 1

    # calcular médias por grupo
    grupo_medias = {}
    for g in ['A', 'B', 'C', 'D']:
        cont = grupo_info[g]['cont']
        soma = grupo_info[g]['soma']
        if cont > 0:
            grupo_medias[g] = soma / cont
        else:
            grupo_medias[g] = None

    # classificar crianças
    curtindo = []
    divertidamente = []
    for child in criancas:
        g = child['grupo']
        peso = child['peso']
        nome = child['nome']
        if g is None:
            # idade fora dos intervalos; por segurança, colocar em Divertidamente
            divertidamente.append(nome)
            continue
        media = grupo_medias.get(g)
        if media is None:
            # não há média definida (grupo sem crianças) — não deve ocorrer para crianças desse grupo
            divertidamente.append(nome)
        else:
            if peso > media:
                curtindo.append(nome)
            else:
                divertidamente.append(nome)

    # imprimir resultados
    print("Curtindo a vida:")
    for nome in curtindo:
        print(nome)
    print("Divertidamente:")
    for nome in divertidamente:
        print(nome)

if __name__ == "__main__":
    main()

Exercícios relacionados