Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- bool zbior_rosnacy(vector<short> zbior)
- {
- short poprzednia = zbior[0];
- for(short i = 1; i < zbior.size(); ++i)
- {
- if(zbior[i] <= poprzednia)
- return false;
- poprzednia = zbior[i];
- }
- return true;
- }
- int suma(vector<short> zbior)
- {
- int wynik = 0;
- for(short i = 0; i < (zbior.size() - 1); ++i)
- wynik += zbior[i];
- return wynik;
- }
- void wypisz_zbior(vector<short> zbior)
- {
- for(short i = 0; i < zbior.size(); ++i)
- cout << zbior[i] << "\t";
- cout << endl;
- }
- bool utworz_nowy_zbior(vector<short> stary_zbior, vector<short>& nowy_zbior)
- {
- short n = stary_zbior.size(); // obecna wielkosc zbioru
- short wielkosc = suma(stary_zbior) + stary_zbior[n-1];
- vector<short> nowy;
- nowy.resize(n);
- for(short k = n-2; k >= 0; --k) // k - początek modyfikowanego zbioru
- {
- for(short i = 0; i < n; ++i)
- nowy[i] = stary_zbior[i]; // kopiowanie dotychczasowego zbioru
- ++nowy[k];
- for(short p = k+1; p < (n-1); ++p) // pozycja obecnie modyfikowanej liczby
- nowy[p] = nowy[p-1] + 1;
- nowy[n - 1] = wielkosc - suma(nowy);
- if(zbior_rosnacy(nowy))
- {
- // wczytanie nowego zbioru:
- /*for(short i = 0; i < n; ++i)
- nowy_zbior[i] = nowy[i];*/
- wypisz_zbior(nowy);
- return true;
- }
- }
- // jeśli jesteśmy tutaj, to znaczy, że trzeba zwiększyć zbiór o 1
- ++n;
- nowy.resize(n);
- for(short i = 0; i < (n-1); ++i)
- nowy[i] = i + 1;
- nowy[n-1] = wielkosc - suma(nowy);
- if(zbior_rosnacy(nowy))
- {
- // wczytanie nowego zbioru:
- /*for(short i = 0; i < n; ++i)
- nowy_zbior[i] = nowy[i];*/
- wypisz_zbior(nowy);
- return true;
- }
- else
- return false;
- }
- int main()
- {
- vector<short> zbior;
- zbior.resize(3);
- zbior = {1, 7, 13};
- utworz_nowy_zbior(zbior, zbior);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement