#include #include using namespace std; bool zbior_rosnacy(vector 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 zbior) { int wynik = 0; for(short i = 0; i < (zbior.size() - 1); ++i) wynik += zbior[i]; return wynik; } void wypisz_zbior(vector zbior) { for(short i = 0; i < zbior.size(); ++i) cout << zbior[i] << "\t"; cout << endl; } bool utworz_nowy_zbior(vector stary_zbior, vector& nowy_zbior) { short n = stary_zbior.size(); // obecna wielkosc zbioru short wielkosc = suma(stary_zbior) + stary_zbior[n-1]; vector nowy; nowy.resize(n); for(short k = n-2; k >= 0; --k) // k - poczatek 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; } } // jesli jestesmy tutaj, to znaczy, ze trzeba zwiekszyc 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 zbior; zbior.resize(3); zbior = {1, 7, 13}; utworz_nowy_zbior(zbior, zbior); return 0; }