Bankomat dynamiczny (wydawanie reszty)

0

Cześć mam problem, pisze bankomat dynamiczny w C++ (wydawanie reszty)
Uzytkownik wpisuje w kolejnosci: kwote, n:=ilosc nominalow i n nominalow.
Program poprawnie wyswietla ile minimalnie da sie wyplacic banknotow, lecz nie wiem co zrobic by wyswietlaly sie tez te nominaly ktorych uzyto np.
dla kwoty = 13, iloscNominalow = 3, nominaly: 5,2,1 Powinien wyswietlic:
4
5 5 2 1.
Domyslam sie ze musze zrobic jakas tablice lokalna gdzie zapisuja sie te nominaly ale nie wiem jak to zrobic, pomoze ktos? Moj kod:

#include <iostream>
#include <algorithm>
using namespace std;
const unsigned long INFINITY=10e6;
int main (){
int kwota,nominaly[2000],T[2000],iloscNominalow,m,ODP[100];
    cin >> kwota;
    cin >> iloscNominalow;

    for(int j=1; j<=iloscNominalow; ++j)
        cin >> nominaly[j];

    T[0]=0;

    for(int i=1; i<=kwota; ++i)
        T[i]=INFINITY;

    int index=1;

    for(int s=1; s<=iloscNominalow; ++s){
        m=nominaly[s];
        for(int b=0; b<=kwota-m; ++b){
            if(T[b]<INFINITY){
                if(T[b]+1<T[b+m]){
                    T[b+m]=T[b]+1;
                    // Tu dalej nie wiem
                }
            }
        }
    }
    if(T[kwota]==INFINITY) cout << "NIE DA SIE WYPLACIC!";
    else{
       cout << T[kwota] << endl;
       for(int i=1; i<=T[kwota]; ++i) cout << ODP[i] << " ";
        }
    return 0;
}

1

Kwota: 16
Nominały: 13,8,1
Twój algorytm poda: 13,1,1,1
Zaś powinien: 8,8

3

Kod straszliwie skopany więc nie poznałem.

  • Indeksacja tablic zaczyna się od 0 nie zaś od 1
  • if(T[b]<INFINITY) { if(T[b]+1<T[b+m]) { jest tożsame z if(T[b]<INFINITY && T[b]+1<T[b+m]) {
  • INFINITY lepiej ustaw na kwota+1 bo jak ktoś zażyci sobie wydanie 2000000 zaś nominały to tylko 1 to klapa
  • Nie jestem pewien czy to zadziała poprawnie w każdym przypadku, oryginalny algorytm mówi że dla każdej kwoty sprawdzamy ... , czyli inna kolejność pętli.
                    T[b+m]=T[b]+1;
                    Q[b+m]=m; // Q jak Quote

Ostatni banknot: b1=Q[kwota];
Przedostatni banknot: b2=Q[kwota-b1];
Kolejny banknot: b3=Q[kwota-b1-b2];

1 użytkowników online, w tym zalogowanych: 0, gości: 1