Guide for Rebaixes el magatzem


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

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:

  1. Llegeix la mida n de la matriu.
  2. Llegeix n*n nombres 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.
  3. Llegeix el percentatge de descompte.
  4. Recorre tota la matriu i calcula el preu rebaixat de cada element: preu - preu * descompte / 100.
  5. Mostra la matriu rebaixada mantenint el mateix format (fila per fila, valors separats per espais).
  6. 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*n valors 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.


Tornar al problema