Advertisement
MeehoweCK

Untitled

Dec 18th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. bool zbior_rosnacy(vector<short> zbior)
  7. {
  8.     short poprzednia = zbior[0];
  9.     for(short i = 1; i < zbior.size(); ++i)
  10.     {
  11.         if(zbior[i] <= poprzednia)
  12.             return false;
  13.         poprzednia = zbior[i];
  14.     }
  15.     return true;
  16. }
  17.  
  18. int suma(vector<short> zbior)
  19. {
  20.     int wynik = 0;
  21.     for(short i = 0; i < (zbior.size() - 1); ++i)
  22.         wynik += zbior[i];
  23.     return wynik;
  24. }
  25.  
  26. void wypisz_zbior(vector<short> zbior)
  27. {
  28.     for(short i = 0; i < zbior.size(); ++i)
  29.         cout << zbior[i] << "\t";
  30.     cout << endl;
  31. }
  32.  
  33. bool utworz_nowy_zbior(vector<short> stary_zbior, vector<short>& nowy_zbior)
  34. {
  35.     short n = stary_zbior.size();       // obecna wielkosc zbioru
  36.     short wielkosc = suma(stary_zbior) + stary_zbior[n-1];
  37.     vector<short> nowy;
  38.     nowy.resize(n);
  39.  
  40.     for(short k = n-2; k >= 0; --k)     // k - pocz¹tek modyfikowanego zbioru
  41.     {
  42.         for(short i = 0; i < n; ++i)
  43.             nowy[i] = stary_zbior[i];       // kopiowanie dotychczasowego zbioru
  44.         ++nowy[k];
  45.         for(short p = k+1; p < (n-1); ++p)      // pozycja obecnie modyfikowanej liczby
  46.             nowy[p] = nowy[p-1] + 1;
  47.         nowy[n - 1] = wielkosc - suma(nowy);
  48.         if(zbior_rosnacy(nowy))
  49.         {
  50.             // wczytanie nowego zbioru:
  51.             for(short i = 0; i < n; ++i)
  52.                 nowy_zbior[i] = nowy[i];
  53.             //wypisz_zbior(nowy);
  54.             return true;
  55.         }
  56.     }
  57.  
  58.     // jeœli jesteœmy tutaj, to znaczy, ¿e trzeba zwiêkszyæ zbiór o 1
  59.     ++n;
  60.     nowy.resize(n);
  61.     for(short i = 0; i < (n-1); ++i)
  62.         nowy[i] = i + 1;
  63.     nowy[n-1] = wielkosc - suma(nowy);
  64.     if(zbior_rosnacy(nowy))
  65.     {
  66.         // wczytanie nowego zbioru:
  67.         nowy_zbior.resize(n);
  68.         for(short i = 0; i < n; ++i)
  69.             nowy_zbior[i] = nowy[i];
  70.         return true;
  71.     }
  72.     else
  73.         return false;
  74. }
  75.  
  76. int main()
  77. {
  78.     vector<short> zbior;
  79.     zbior.resize(1);
  80.     zbior = {50};
  81.  
  82.     do
  83.     {
  84.         wypisz_zbior(zbior);
  85.     } while(utworz_nowy_zbior(zbior, zbior));
  86.  
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement