Advertisement
kubpica

Generacja podzialow

Mar 25th, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. bool czydopliku = false;
  7. ofstream wynik;
  8.  
  9. int main()
  10. {
  11.         wynik.open("wynik.txt");
  12.         int n = 0;
  13.         int k = 0;
  14.         bool czyDoklanieKblokowe = false;
  15.         cout << "Program generuje podzialy zbioru n-elementowego. {1,...,n}" << endl;
  16.         cout << "Gdzie wypisac wyniki? 1 - na ekran 2 - do pliku" << endl;
  17.         cin >> n;
  18.         if(n==2) czydopliku = true;
  19.         n = 0;
  20.  
  21.         cout << "Warianty: " << endl;
  22.         cout << "1. Generacja co najwyzej k-blokowych podzialow (1<=k<=n)" << endl;
  23.         cout << "2. Generacja dokladnie k-blokowych podzialow (1<=k<=n)" << endl;
  24.         //cout << "3. Generacja dokladnie k-blokowych podzialow zrownowazonych (Zakladam, ze podzialy zrownowazone to takie, ktore posiadaja taka sama ilosc elementow)" << endl;
  25.  
  26.         while(1){
  27.             cout << "Wybierz wariant: ";
  28.             cin >> n;
  29.             if(n<1 || n>3){
  30.                 cout << "Podano bledne dane. Sprobuj jeszcze raz." << endl;
  31.                 continue;
  32.             }
  33.             if(n==2) czyDoklanieKblokowe = true; else czyDoklanieKblokowe = false;
  34.  
  35.             cout << "Podaj n: ";
  36.             cin >> n;
  37.             if(n<1){
  38.                 cout << "Podano bledne dane. Sprobuj jeszcze raz." << endl;
  39.                 continue;
  40.             }
  41.  
  42.             cout << "Podaj k: ";
  43.             cin >> k;
  44.             if(k<1 || k>n){
  45.                 cout << "Podano bledne dane. Sprobuj jeszcze raz." << endl;
  46.                 continue;
  47.             }
  48.             break;
  49.         }
  50.  
  51.         cout << "Rozpoczynam wypisywanie kolejnych mozliwych podzialow wybranego zbioru." << endl;
  52.         int a[1024];
  53.         for (int i = 0; i < n; i++) a[i] = 1;
  54.         int ilosc = 0;
  55.         int m = 0;
  56.         bool czyWypisac = true;
  57.  
  58.         do{
  59.             if(czyDoklanieKblokowe){
  60.                 for(int j = 0; j <= n-1 ; j++ ){
  61.                     if( a[j] > m ){
  62.                         m = a[j];
  63.                     }
  64.                 }
  65.                 if(m!=k) czyWypisac = false; else czyWypisac = true;
  66.             }else czyWypisac = true;
  67.  
  68.             if(czyWypisac){
  69.                 ilosc++;
  70.                 if(czydopliku) wynik << ilosc << ". "; else cout << ilosc << ". ";
  71.                 for (int i = 0; i < n; i++){
  72.                         if(czydopliku) wynik << a[i]; else cout << a[i];
  73.                 }
  74.                 if(czydopliku) wynik << endl; else cout << endl;
  75.             }
  76.  
  77.             a[n-1]++;
  78.             for(int i = 1; n-i-1>=0 ; ){
  79.                 m = 0;
  80.                 for(int j = 0; j < n-i ; j++ ){
  81.                     if( a[j] > m ){
  82.                         m = a[j];
  83.                     }
  84.                 }
  85.                 if( a[n-i] == m+2 || a[n-i] == k+1 ){ //a[n-i] == a[n-i-1]+2
  86.                     a[n-i-1]++;
  87.                     a[n-i] = 1;
  88.                     i++;
  89.                 } else break;
  90.             }
  91.         }while(a[0] == 1); //&& ilosc < 24
  92.  
  93.         if(czydopliku) wynik << "Ilosc wygenerowanych podzialow: " << ilosc << endl; else cout << "Ilosc wygenerowanych podzialow: " << ilosc << endl;
  94.         if(czydopliku) cout << "Gotowe. Wyniki znajdziesz w pliku wynik.txt" << endl;
  95.         cin >> n;
  96.  
  97.         return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement