Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wydawanie reszty metoda zachłanna

Ostatnio zmodyfikowano 2018-03-30 19:53
Autor Wiadomość
robertos18
Temat założony przez niniejszego użytkownika
Wydawanie reszty metoda zachłanna
» 2018-03-30 18:16:34
Witam
Zastosowałem metodę zachłanną, tylko jak powiedzmy dam resztę 400000 to wyswietla mi:
50000 x 8
50000 x 7
50000 x 6
50000 x 5
50000 x 4
50000 x 3
50000 x 2
50000 x 1

zamiast tylko 50000 x 8. Jak to poprawić?


C/C++
#include <iostream>
#include <stdlib.h>

using namespace std;

const short WIELKOSC_TAB = 15;
int * tab1;
int wybor;

int main()
{
    while( true )
    {
        int r, p, x;
        cout << "Wybierz nominal: " << endl;
        cout << "1. polski zloty (przeliczony w groszach)" << endl;
        cout << "2. amerykanski dolar (przeliczony w centach)" << endl;
       
        cin >> wybor;
        if( wybor == 1 || wybor == 2 )
        {
           
            switch( wybor )
            {
            case 1:
                tab1 = new int[ WIELKOSC_TAB ] { 50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1 }; // zloty w groszach
                break;
               
            case 2:
                tab1 = new int[ WIELKOSC_TAB ] { 100000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1 }; // dolar w centach
                break;
            }
           
        }
        else
        {
            cout << "Wybrales zla liczbe" << endl;
            system( "PAUSE" );
            return 0;
        }
       
        cout << "Podaj reszte do wyplacenia: ";
        cin >> r;
       
        while( r > 0 )
        {
            int n = 0;
            for( int i = 0; i <= 15; ++i )
            {
                if(( tab1[ i ] <= r ) &&( tab1[ i ] > n ) )
                {
                    p = r / tab1[ i ];
                    n = tab1[ i ];
                   
                    cout << tab1[ i ] << " x " << p << endl;
                }
               
            }
           
            r -= n;
            ++x;
           
        }
       
        delete[] tab1;
    }
    return 0;
}
P-170363
maly7
» 2018-03-30 18:37:05
Taka drobnostka :p Musisz odejmować nominał * ilość:
r -= n;
P-170364
robertos18
Temat założony przez niniejszego użytkownika
» 2018-03-30 18:53:53
Jak mnoze razy 15, to dla 400000 działa, ale dla powiedzmy 4343234 juz nie :/
P-170365
maly7
» 2018-03-30 19:25:40
Nie masz mnożyć razy 15 tylko razy ilość jaką obliczyłeś w pętli (p).
Czyli tak:
r -= n * p;

A i dodatkowo ta pętla for nie jest Ci do niczego potrzebna.
P-170368
robertos18
Temat założony przez niniejszego użytkownika
» 2018-03-30 19:53:08
Dostałem takie zadanie:

Napisz program, który najpierw czyta nominały (zadecyduj, czy przeliczać nominały na
najmniejsza jednostkę), a następnie w pętli czyta kwoty/reszty do tworzenia z najmniejszej
liczby nominałów metodą zachłanną. Wykonaj program dla wielu kwot/reszt.
(a) Jako danych użyj nominałów naszej waluty.
(b) Jako danych użyj monet i banknotów amerykańskiej waluty; w centach: 1 (penny), 5
(nickel), 10 (dime), 25 (quarter), 50 i w dolarach: 1, 2, 5, 10, 20, 50, 100, 200, 1000.

Moje pytanie brzmi. Czy dobrze zrobiłem to zadanie?
P-170373
« 1 »
  Strona 1 z 1