Guide for Rebaixes el magatzem
Com abordar aquest problema
Tens una botiga amb els preus dels productes guardats en una matriu quadrada (n files x n columnes). Has de llegir-la, aplicar-hi un descompte (percentatge) i mostrar la matriu de preus rebaixats, indicant finalment quin és el preu més alt un cop aplicat el descompte.
Idea general:
- Llegeix la mida
nde la matriu. - Llegeix
n*nnombres reals (poden venir repartits en diverses línies) i desa'ls en una estructura de dues dimensions (una llista de llistes, o una matriu) de mida n x n. - Llegeix el percentatge de descompte.
- Recorre tota la matriu i calcula el preu rebaixat de cada element:
preu - preu * descompte / 100. - Mostra la matriu rebaixada mantenint el mateix format (fila per fila, valors separats per espais).
- Mentre calcules els preus rebaixats, vés guardant quin és el més alt trobat fins ara, per poder-lo mostrar a l'última línia.
Paranys habituals:
- No cal que llegeixis exactament una fila per línia d'entrada: llegeix simplement
n*nvalors seguits, independentment de com estiguin repartits en línies. - El preu més alt s'ha de calcular sobre els preus JA rebaixats, no sobre els originals.
- Fixa't en el format dels números de sortida (per exemple, si cal mostrar sempre un decimal).
Pista per a Java
Amb un Scanner pots llegir els nombres un darrere l'altre amb nextDouble(), sense preocupar-te
de en quina línia estan:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double[][] matriu = new double[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matriu[i][j] = sc.nextDouble();
}
}
double descompte = sc.nextDouble();
double maxim = Double.NEGATIVE_INFINITY;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matriu[i][j] = matriu[i][j] - matriu[i][j] * descompte / 100;
if (matriu[i][j] > maxim) maxim = matriu[i][j];
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
sb.append(matriu[i][j]);
if (j < n - 1) sb.append(" ");
}
sb.append("\n");
}
System.out.print(sb);
System.out.println("Objecte amb major preu: " + maxim);
}
}
Igual que en Python, primer es recalculen tots els preus i, de pas, es va actualitzant el màxim.