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 Python

Una manera còmoda de no haver de preocupar-te de com estan repartides les línies és llegir tota l'entrada de cop i separar-la en valors (split()), i anar-los consumint un a un:

import sys

dades = sys.stdin.read().split()
pos = 0

n = int(dades[pos]); pos += 1

matriu = []
for i in range(n):
    fila = [float(dades[pos + j]) for j in range(n)]
    pos += n
    matriu.append(fila)

descompte = float(dades[pos]); pos += 1

maxim = None
for i in range(n):
    for j in range(n):
        matriu[i][j] = matriu[i][j] - matriu[i][j] * descompte / 100
        if maxim is None or matriu[i][j] > maxim:
            maxim = matriu[i][j]

for fila in matriu:
    print(" ".join(str(v) for v in fila))

print("Objecte amb major preu:", maxim)

Fixa't que primer es calculen TOTS els preus rebaixats i, a mesura que ho fem, anem actualitzant el màxim.


Tornar al problema