Guide for El cistell de la compra


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

Has de llegir una llista de productes amb el seu nom i preu, i després dir quin és el més car, \ el més barat, i quin ocupa la posició P si els ordenessis de més car a més barat.

Idea general:

  1. Llegeix N, el nombre de productes.
  2. Llegeix les N línies següents, cadascuna amb un nom i un preu, i guarda-les en una estructura \ (per exemple una llista de parelles nom-preu).
  3. Llegeix el número P que indica la posició a consultar.
  4. Ordena la llista de productes pel preu, de més car a més barat.
  5. Un cop ordenada: el primer element és el més car, l'últim és el més barat, i l'element de la \ posició P és el que es demana.
  6. Mostra les tres línies amb el format exacte que demana l'enunciat.

Paranys habituals:

  • El preu és un número decimal: vés amb compte en llegir-lo i mostrar-lo amb el format adequat.
  • Fixa't bé si la posició P es compta des d'1 (el primer producte és la posició 1) o des de 0, \ per no desplaçar-te un lloc.
  • No confonguis "ordenar de més car a més barat" amb l'ordre habitual (ascendent): aquí cal \ ordenar en sentit invers (descendent).

Pista per a Java

Crea una petita classe Producte amb nom i preu, guarda'ls en una List, i ordena-la amb un \ Comparator que inverteixi l'ordre habitual:

import java.util.*;

public class Main {
    static class Producte {
        String nom;
        double preu;
        Producte(String nom, double preu) {
            this.nom = nom;
            this.preu = preu;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine().trim());
        List<Producte> productes = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            String[] parts = sc.nextLine().trim().split("\\s+");
            productes.add(new Producte(parts[0], Double.parseDouble(parts[1])));
        }

        int p = Integer.parseInt(sc.nextLine().trim());

        // ordena de mes car a mes barat
        productes.sort((a, b) -> Double.compare(b.preu, a.preu));

        Producte mesCar = productes.get(0);
        Producte mesBarat = productes.get(productes.size() - 1);
        Producte buscat = productes.get(p - 1); // compte amb l'index (comença per 1?)

        System.out.println("EL MES CAR: " + mesCar.nom + " " + mesCar.preu);
        System.out.println("EL MES BARAT: " + mesBarat.nom + " " + mesBarat.preu);
        System.out.println("EL BUSCAT: " + buscat.nom + " " + buscat.preu);
    }
}

Tornar al problema