Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- int suma_wektora(vector<int> wektor)
- {
- int suma = 0;
- unsigned n = wektor.size();
- for(unsigned i = 0; i < n; ++i)
- suma += wektor[i];
- return suma;
- }
- int dopelnienie_wektora(vector<int> wektor, int suma)
- {
- int wynik = 0;
- unsigned n = wektor.size();
- for(unsigned i = 0; i < n - 1; ++i)
- wynik += wektor[i];
- return suma - wynik;
- }
- int maks_wartosc(vector<int> wektor, unsigned pozycja, int suma)
- {
- unsigned n = wektor.size();
- int wynik = 2;
- for(unsigned i = 0; i < n - 1; ++i)
- {
- if(i == pozycja)
- continue;
- wynik += wektor[i];
- }
- return suma - wynik;
- }
- void wypisz_wektor(vector<int> wektor)
- {
- unsigned n = wektor.size();
- for(unsigned i = 0; i < n; ++i)
- cout << wektor[i] << '\t';
- cout << endl;
- }
- vector<int> nastepny_wektor(vector<int> wektor)
- {
- unsigned n = wektor.size();
- int suma = suma_wektora(wektor);
- if(n == suma / 2) // jeżeli liczba elementów jest równa suma / 2, to znaczy, że w wektorze są same dwójki - jest to ostatni wektor
- {
- vector<int> wynik;
- wynik.resize(0);
- return wynik; // zwracamy pusty wektor
- }
- bool flaga = false;
- for(int poz = n - 2; poz >= 0; --poz)
- {
- if(wektor[poz] < maks_wartosc(wektor, poz, suma))
- {
- wektor[poz] += 2; // jeśli jest jeszcze "miejsce" na zwiększenie wartości, zwiększamy ją o 2
- wektor[n - 1] = dopelnienie_wektora(wektor, suma); // dopełniamy ostatni element wektora
- flaga = true; // stawiamy flagę informującą, że doszło do operacji
- break; // wychodzimy z pętli
- }
- else // jeśli nie ma miejsca na zwiększenie wartości
- {
- wektor[poz] = 2; // ustawiamy najmniejszą wartość (2) po czym przechodzimy na pozycję o 1 mniejszą
- }
- }
- if(flaga)
- return wektor; // jeśli doszło do zmiany, zwracamy zmieniony wektor
- // jeśli nie doszło do żadnych zmian, generujemy nowy wektor, większy o jeden element
- vector<int> wynik;
- ++n;
- wynik.resize(n);
- for(unsigned i = 0; i < n; ++i)
- wynik[i] = 2;
- wynik[n - 1] = dopelnienie_wektora(wynik, suma);
- return wynik;
- }
- int main()
- {
- vector<int> wektor;
- wektor.push_back(20);
- while(wektor.size() > 0)
- {
- wypisz_wektor(wektor);
- wektor = nastepny_wektor(wektor);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement