lunedì 31 marzo 2014

[C++] Sacchi

Mario lavora in una fabbrica di zucchero come uomo delle consegne. Ha appena ricevuto un ordine:
deve consegnare esattamente N kilogrammi di zucchero a un negozio di caramelle sulla costa
dell'Adriatico. Mario può usare due tipi di pacchi: quelli che contengono 3 kg, e quelli che
contengono 5 kg di zucchero (non ci sono pacchi con misure intermedie, può usare solo pacchi
pieni da 3k o 5kg).
Mario vorrebbe usare il numero minore di pacchi possibile. Se per esempio deve consegnare 18kg
di zucchero, potrebbe usare 6 pacchi da 3kg. Ma sarebbe meglio utillizare tre pacchi da 5kg e 1
pacco da 3kg, per un totale di 4 pacchi.
Aiutate Mario a trovare il numero minore di pacchi necessari per trasportare esattamente N
kilogrammi di zucchero

INPUT (input.txt)
La prima e unica riga dell'input contiene un intero N (3 <= N <= 5000).

OUTPUT (output.txt)
L'output deve consistere di un unico numero, il numero minore di pacchi che Mario deve usare. Se è
impossibile trasportare esattamente N kilogrammi, stampare in output -1.

input.txt input.txt input.txt
4             9            18
output.txt output.txt output.txt
-1             3               4

Sfruttiamo al massimo i pacchi da 5, poi, se non bastano, usiamo quelli da tre:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

int main(){
    ifstream in ("input.txt");
    ofstream out ("output.txt");
   
   int k,d5,d3,s3;
      in>>k;

d5= k/5;
d3= k-d5*5;
s3=d3/3;

while (d3%3 != 0 && d5-1 >-1){
d3= k-(--d5)*5;
s3=d3/3;}

 
if (d3%3 ==0 )
out<< d5+s3;
else
   out<< -1;
    return 0;}

Nessun commento:

Posta un commento

Si prega di non commentare in modo volgare e/o offensivo.