Advertisement
MouseyN1

Descompunere in bancnote backtracking

Oct 30th, 2013
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. /* Se citeste o suma S, iar apoi n bancnote de valori distincte. Sa se afiseze toate
  2. modurile de a plati suma S cu valorile bancnotelor.*/
  3.  
  4. #include <iostream>
  5. using namespace std;
  6. int st[50], n, S1, v[100], S;
  7.  
  8. void citire()
  9. {
  10.     int i;
  11.     for(i = 1; i <= n; i++)
  12.     {
  13.         cout << "v[" << i << "]=";
  14.         cin >> v[i];
  15.     }
  16. }
  17. int valid(int k)
  18. {
  19.     int i;
  20.     S1 = 0;
  21.     if(k >= 2 && st[k-1] > st[k])
  22.         return 0;
  23.     for(i = 1; i <= k; i++)
  24.         S1 = S1 + v[st[i]];
  25.     if(S1 > S)
  26.         return 0;
  27.     return 1;
  28. }
  29.  
  30. void afisare(int k)
  31. {
  32.     int i;
  33.     cout << endl;
  34.     for(i = 1; i < k; i++)
  35.         cout << v[st[i]] << "+";
  36.     cout << v[st[k]];
  37. }
  38.  
  39. void back(int k)
  40. {
  41.     int i;
  42.     for(i = 1; i <= n; i++)
  43.     {
  44.         st[k] = i;
  45.         if(valid(k))
  46.         {
  47.             if(S1 == S)
  48.                 afisare(k);
  49.             else back(k+1);
  50.         }
  51.     }
  52. }
  53.  
  54. int main()
  55. {
  56.     cout << "n=";
  57.     cin >> n;
  58.     cout << "S=";
  59.     cin >> S;
  60.     citire();
  61.     back(1);
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement