Il cassiere Camillo

È venerdì, e il cassiere Camillo ha davanti a sé una lunga fila di clienti della sua banca venuti a ritirare contante per il weekend.
Per fare presto, Camillo decide di usare per ogni cliente il numero minimo possibile di banconote.
Sapreste scrivere un programma per evitargli il mal di testa, considerato che ha a disposizione banconote da 100.000, 10.000, 5.000, 2.000 e 1.000 in quantità illimitata e che l’entità di ogni prelievo è un multiplo di 1.000 lire?

Dati in input

Il file input.txt contiene l’importo del prelievo. Il file è costituito da un’unica riga di testo, contenente un numero (senza puntini o virgole che raggruppano le cifre a tre a tre!).

Dati in output

Il programma, dopo aver letto il file di input, deve calcolare il numero di banconote necessario per ognuno dei tagli disponibili, e scriverlo su un file di nome output.txt.
Più precisamente, il file output.txt deve contenere cinque righe, che corrispondono (in ordine, dalla prima all’ultima) alle banconote da

  • 100.000
  • 10.000
  • 5.000
  • 2.000
  • 1.000.

Ogni riga deve contenere un unico numero intero, che rappresenta il numero di banconote di quel taglio necessarie.

Assunzioni

  1. Il file di input non contiene altri caratteri oltre a quelli precisati.
  2. L’entità del prelievo è in ogni caso inferiore a 1 miliardo di lire.
  3. Importante!
    Il programma non deve scrivere nulla sul video, e non deve interagire con l’utente.
    Deve solo leggere il file di input e scrivere il file di output.
  4. L’esecuzione del programma deve terminare entro 5 secondi.

Esempi

input.txt output.txt
1 10000 0
1
0
0
0
2 152000 1
5
0
1
0
3 2001000 20
0
0
0
1

Program OII_2001_Il_cassiere_Camillo;
Const
     NTAGLI   = 5;
     TAGLI    : array[1..NTAGLI] of LongInt = (100000,10000,5000,2000,1000);
     banconote: array[1..NTAGLI] of LongInt = (0,0,0,0,0);
Var
     prelievo: LongInt;
     i       : Integer;
     fileIN  ,
     fileOUT : Text;
begin
     Assign(fileIN, 'input.txt');
     Reset(fileIN);
     Read(fileIN, prelievo);
     Close(fileIN);

     for i:=1 to NTAGLI do
     begin
        banconote[i]:=(prelievo DIV TAGLI[i]);
        prelievo    :=(prelievo MOD TAGLI[i]);
     end;

     Assign(fileOUT, 'output.txt');
     Rewrite(fileOUT);
     for i:=1 to NTAGLI do
         WriteLn(fileOUT, banconote[i]);
     Close(fileOUT);
end.