Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- int getNumber();
- void saveCurrentPartition(std::ofstream&, int*, int);
- int main()
- {
- int number = getNumber(), *partitions = new int[number](), lastElement = 0;
- partitions[0] = number;
- std::ofstream file("Program_03.txt");
- while (true)
- {
- saveCurrentPartition(file, partitions, lastElement + 1);
- int numberOfOnes = 0;
- while (partitions[lastElement] == 1)
- {
- numberOfOnes++;
- lastElement--;
- }
- if (lastElement < 0)
- {
- file.close();
- return 0;
- }
- partitions[lastElement]--;
- numberOfOnes++;
- while (numberOfOnes > partitions[lastElement])
- {
- partitions[lastElement + 1] = partitions[lastElement];
- numberOfOnes -= partitions[lastElement];
- lastElement++;
- }
- partitions[lastElement + 1] = numberOfOnes;
- lastElement++;
- }
- }
- void saveCurrentPartition(std::ofstream &file, int *partition, int number)
- {
- for (int i = 0; i < number; i++)
- file << partition[i] << " ";
- file << std::endl;
- }
- int getNumber()
- {
- std::string setsAsString;
- std::getline(std::cin, setsAsString);
- while (setsAsString.length() == 0)
- {
- std::cout << "!(number)" << std::endl;
- std::getline(std::cin, setsAsString);
- }
- int letterIndex = 0;
- while (letterIndex < setsAsString.length())
- {
- if (setsAsString[letterIndex] < '0' || setsAsString[letterIndex] > '9')
- {
- std::cout << "!(number)" << std::endl;
- std::getline(std::cin, setsAsString);
- letterIndex = 0;
- }
- else
- letterIndex++;
- }
- return std::stoi(setsAsString);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement