Guide for Llistat d'alumnes


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.
Mostra el codi per a: Consideracions generals Java 11 Python 3

Com abordar aquest problema

Se't donen les notes de N alumnes (nom, nota del primer parcial i nota del segon parcial), i has \ de trobar dos alumnes concrets: un segons la seva posició ordenant pel segon parcial, i un altre \ segons la seva posició ordenant per la nota final.

Idea general:

  1. Llegeix N i després les N línies, guardant per a cada alumne el seu nom i les dues notes.
  2. Calcula la nota final de cada alumne (un 40% de la nota del primer parcial i un 60% de la \ del segon parcial).
  3. Llegeix els dos números P1 i P2 del final de l'entrada.
  4. Ordena una còpia de la llista d'alumnes pel segon parcial, de més gran a més petit, i queda't \ amb l'alumne que ocupa la posició P1.
  5. Ordena (una altra còpia de) la llista pel la nota final, de més gran a més petit, i queda't amb \ l'alumne que ocupa la posició P2.
  6. Escriu les dues línies de sortida amb el format demanat (nom, parcial1, parcial2, nota final).

Paranys habituals:

  • Les posicions P1 i P2 són 1-indexades (la posició 1 és la primera), mentre que els índexs de \ llistes en programació solen començar a 0.
  • Cal ordenar l'alumne sencer (nom + notes juntes), no cada columna per separat, si no perdràs la \ relació entre el nom i les seves notes.
  • Compte amb el format de sortida dels decimals de la nota final.

Pista per a Java

Defineix una petita classe Alumne amb el nom i les notes, guarda'ls en un ArrayList<Alumne>, i \ ordena'l dues vegades amb Collections.sort fent servir un Comparator diferent cada vegada:

import java.util.*;

public class Main {
    static class Alumne {
        String nom;
        double p1, p2, nota_final;
        Alumne(String nom, double p1, double p2) {
            this.nom = nom;
            this.p1 = p1;
            this.p2 = p2;
            this.nota_final = 0.4 * p1 + 0.6 * p2;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine().trim());
        List<Alumne> alumnes = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String[] dades = sc.nextLine().trim().split("\\s+");
            alumnes.add(new Alumne(dades[0], Double.parseDouble(dades[1]), Double.parseDouble(dades[2])));
        }

        int pos1 = sc.nextInt();
        int pos2 = sc.nextInt();

        List<Alumne> perSegonParcial = new ArrayList<>(alumnes);
        perSegonParcial.sort((a, b) -> Double.compare(b.p2, a.p2));

        List<Alumne> perNotaFinal = new ArrayList<>(alumnes);
        perNotaFinal.sort((a, b) -> Double.compare(b.nota_final, a.nota_final));

        Alumne a1 = perSegonParcial.get(pos1 - 1);
        Alumne a2 = perNotaFinal.get(pos2 - 1);

        System.out.printf("%s %s %s %.2f%n", a1.nom, a1.p1, a1.p2, a1.nota_final);
        System.out.printf("%s %s %s %.2f%n", a2.nom, a2.p1, a2.p2, a2.nota_final);
    }
}

Tornar al problema