From Jesus, 8 Months ago, written in C++.
Embed
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. /*
  7. monety - przekazuje wskaznik na tablice monet
  8. indeks - przekazuje informacje na ktorej monecie ma pracowac funkcja
  9. kwota - kwota pozostala do wypelnienia
  10. poprzednie - informuje jakie monety zostaly wczesniej wypisane;
  11. ile - pole statyczne przechowujace ilosc mozliwosci
  12. g - ilosc monet jaka zmiesci sie w pozostalej do dopelnienia kwocie
  13. waruek else - dopelnia kwote monetami o najnizszej wartosci (indeks 0 w tablicy)
  14. */
  15.  
  16. static int fnk(int* monety, int indeks, int kwota, string poprzednie) {
  17.         static int ile = 0;
  18.         int g = kwota / monety[indeks];
  19.         if (indeks != 0) {
  20.                 for (int i = 0; i <= g; i++) {
  21.                         if (i > 0)
  22.                                 cout << poprzednie;
  23.                         string obecne = "";
  24.                         for (int x = 0; x < i; x++)
  25.                                 obecne += to_string(monety[indeks]) + " ";
  26.                         cout << obecne;
  27.                         fnk(monety, indeks - 1, kwota - monety[indeks] * i, poprzednie + obecne);
  28.                 }
  29.         }
  30.         else {
  31.                 for (int i = 0; i < g; i++)
  32.                         cout << monety[indeks] << " ";
  33.                 cout << endl;
  34.                 ile++;
  35.         }
  36.         return ile;
  37. }
  38.  
  39. int main() {
  40.         // Wartosci bazowe
  41.         int monety[] = { 1, 2, 5 };
  42.         int rozmiar_tab = 3;
  43.         int kwota = 10;
  44.  
  45.         //Naglowek
  46.         cout << "Kwota: " << kwota << "\tMonety: ";
  47.         for (int i = 0; i < rozmiar_tab; i++)
  48.                 cout << monety[i] << ((i == rozmiar_tab - 1) ? " " : ", ");
  49.         cout << endl << endl;
  50.  
  51.         //Wypisanie mozliwosci;
  52.         int ile = fnk(monety, rozmiar_tab - 1, kwota, "");
  53.         cout << "\nIlosc mozliwosci: " << ile << endl;
  54.         system("pause");
  55.         return 0;
  56. }
  57.