Guide for El cistell de la compra
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:
- Llegeix N, el nombre de productes.
- 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).
- Llegeix el número P que indica la posició a consultar.
- Ordena la llista de productes pel preu, de més car a més barat.
- 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.
- 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);
}
}