Advertisement
Guest User

Untitled

a guest
Mar 17th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. int getNumber();
  6. void saveCurrentPartition(std::ofstream&, int*, int);
  7.  
  8. int main()
  9. {
  10.     int number = getNumber(), *partitions = new int[number](), lastElement = 0;
  11.  
  12.     partitions[0] = number;
  13.  
  14.     std::ofstream file("Program_03.txt");
  15.  
  16.     while (true)
  17.     {
  18.         saveCurrentPartition(file, partitions, lastElement + 1);
  19.        
  20.         int numberOfOnes = 0;
  21.  
  22.         while (partitions[lastElement] == 1)
  23.         {
  24.             numberOfOnes++;
  25.             lastElement--;
  26.         }
  27.  
  28.         if (lastElement < 0)
  29.         {
  30.             file.close();
  31.             return 0;
  32.         }
  33.  
  34.         partitions[lastElement]--;
  35.         numberOfOnes++;
  36.  
  37.         while (numberOfOnes > partitions[lastElement])
  38.         {
  39.             partitions[lastElement + 1] = partitions[lastElement];
  40.             numberOfOnes -= partitions[lastElement];
  41.             lastElement++;
  42.         }
  43.  
  44.         partitions[lastElement + 1] = numberOfOnes;
  45.         lastElement++;
  46.     }
  47. }
  48.  
  49. void saveCurrentPartition(std::ofstream &file, int *partition, int number)
  50. {
  51.     for (int i = 0; i < number; i++)
  52.         file << partition[i] << " ";
  53.  
  54.     file << std::endl;
  55. }
  56.  
  57. int getNumber()
  58. {
  59.     std::string setsAsString;
  60.     std::getline(std::cin, setsAsString);
  61.  
  62.     while (setsAsString.length() == 0)
  63.     {
  64.         std::cout << "!(number)" << std::endl;
  65.         std::getline(std::cin, setsAsString);
  66.     }
  67.  
  68.     int letterIndex = 0;
  69.  
  70.     while (letterIndex < setsAsString.length())
  71.     {
  72.         if (setsAsString[letterIndex] < '0' || setsAsString[letterIndex] > '9')
  73.         {
  74.             std::cout << "!(number)" << std::endl;
  75.             std::getline(std::cin, setsAsString);
  76.             letterIndex = 0;
  77.         }
  78.         else
  79.             letterIndex++;
  80.     }
  81.  
  82.     return std::stoi(setsAsString);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement