Ciao, ho un problema con l’esercizio coinchange: un singolo output non è corretto nel subtask 3. Non riesco proprio a capire dove sia il problema, ho provato a cambiare i tipi delle variabili ma nulla. Allego il codice:
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
// vettore preso in input con numero di monete e banconote per ogni valore
long long V[15];
// vettore di moltiplicatori che verrà usato per trasformare le "quantità" nel loro effettivo valore
long double x[15] = {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100, 200, 500};
//vettore restituito in output con gli scambi effettuati
long long sol[15] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int main()
{
//stream da file
//commentare il prossimo rigo permetterà l'inserimento da console
ifstream cin("input.txt");
ofstream cout("output.txt");
//lettura delle 15 quantita' di banconote o monete dallo stream di input
for (int i = 0; i < 15; i++)
{
cin >> V[i];
}
//variabile per sommare il valore totale effettivo in euro del vettore di banconote e monete.
long double somma = 0;
//somma
for (int i = 0; i < 15; i++)
{
//ogni quantità viene moltiplicata per il rispettivo moltiplicatore (es. 35*0.02 è la moltiplicazione che avviene con 35 monete da 2 centesimi)
somma += V[i] * x[i];
}
//variabile
long double tmp = 0;
for (int i = 14; i > -1; i--)
{
//ogni volta si cerca di ottenere il numero più alto di monete o banconote (es. se ho 1516€ questa operazione restituisce al primo ciclo 3.032)
tmp = somma / x[i];
//nel vettore delle soluzioni si andrà a porre il valore ottenuto in tmp, di cui prendiamo solo la parte intera
sol[i] = static_cast<long long> (floor(tmp));
somma -= x[i] * sol[i];
}
for (int i = 0; i < 15; i++)
cout << sol[i] << " ";
cout << endl;
return 0;
}