Guide for El cistell de la compra (2)
Com abordar aquest problema
Se't donen N productes (nom i preu) i, al final, el nom d'un producte que vols comprovar. Has de dir \ si el tens a la cistella i, si el trobes, dir també quin és l'anterior en ordre alfabètic (si n'hi ha).
Idea general:
- Llegeix el nombre N i, a continuació, els N parells (nom, preu).
- Guarda'ls en una llista de parelles (nom, preu).
- Ordena la llista pel nom del producte, en ordre alfabètic.
- Llegeix el nom del producte que es vol comprovar.
- Busca'l dins la llista ja ordenada. Si no hi és, escriu "NO N'HI HAVIA".
- Si hi és, escriu "SI, M'HA COSTAT " seguit del preu. Si, a més, no és el primer de la llista \ ordenada, afegeix " I TAMBE TINC " amb el nom i el preu del producte immediatament anterior en \ l'ordre alfabètic.
Paranys habituals:
- Cal ordenar per nom, no pel l'ordre en què s'han llegit els productes.
- El "producte anterior" ho és en ordre alfabètic un cop ordenada la llista, no l'anterior a l'entrada.
- Si el producte trobat és el primer en ordre alfabètic, no cal afegir la segona part del missatge.
- Vigila com formates el preu perquè coincideixi amb com l'has llegit.
Pista per a Java
Guarda els noms i preus en dos arrays paral·lels, ordena un array d'índexs segons el nom, i cerca-hi \ el producte demanat:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine().trim());
String[] noms = new String[n];
double[] preus = new double[n];
for (int i = 0; i < n; i++) {
String[] parts = sc.nextLine().trim().split("\\s+");
noms[i] = parts[0];
preus[i] = Double.parseDouble(parts[1]);
}
Integer[] index = new Integer[n];
for (int i = 0; i < n; i++) index[i] = i;
Arrays.sort(index, (a, b) -> noms[a].compareTo(noms[b]));
String buscat = sc.nextLine().trim();
int posicio = -1;
for (int k = 0; k < n; k++) {
if (noms[index[k]].equals(buscat)) {
posicio = k;
break;
}
}
if (posicio == -1) {
System.out.println("NO N'HI HAVIA");
} else {
int i = index[posicio];
StringBuilder sb = new StringBuilder();
sb.append("SI, M'HA COSTAT ").append(preus[i]);
if (posicio > 0) {
int ant = index[posicio - 1];
sb.append(" I TAMBE TINC ").append(noms[ant]).append(" A ").append(preus[ant]);
}
System.out.println(sb.toString());
}
}
}