Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int* tab;
  6. int licznik;
  7.  
  8. int liczba_stirlinga(int n, int k)
  9. {
  10. int s;
  11. if( k==n) return 1;
  12. if(k==0) return 0;
  13. if(k>n) return 0;
  14.  
  15. s=k*liczba_stirlinga(n-1,k)+liczba_stirlinga(n-1,k-1);
  16. return s;
  17.  
  18. }
  19.  
  20.  
  21. int liczba_bela(int n, int k)
  22. {
  23. int b=0;
  24. if (n==0) b=0;
  25. for(k=0;k<n;k++)
  26. { b=b+liczba_stirlinga(n,k);}
  27. return b;
  28. }
  29.  
  30.  
  31. void print (int n)
  32. {
  33. for(int i=0; i<n; i++)
  34. {
  35. cout<< tab[i] ;
  36. }
  37. cout << "\n";
  38. }
  39.  
  40. int min (int a, int b)
  41. {
  42. if(a>b)
  43. return b;
  44. else
  45. return a;
  46. }
  47.  
  48. int max(int a, int b)
  49. {
  50. if( a>b)
  51. return a;
  52. else return b;
  53.  
  54. }
  55.  
  56. void bloki (int index, int n, int m, int maxim, int* tab) {
  57. if (index == n) {
  58. print(n);licznik++;
  59. } else {
  60. for(int i = 1; i <= min(maxim +1,m); i++) {
  61. tab[index] = i;
  62. int nowemaxim = min(max(maxim, i), m);
  63. bloki(index + 1, n, m, nowemaxim, tab);
  64. }
  65. }
  66. }
  67. int main()
  68. { int n, k;
  69. cout<<" Program generujacy k podzialow zbioru n elementowego" <<endl;
  70. cout<< "Prosze podac liczbe elementow zbioru: n=";
  71. cin>> n;
  72. cout<<" Prosze podac liczbe podzialow zbioru: k =";
  73. cin>>k;
  74. tab =new int[n];
  75. bloki(0,n,k,0,tab);
  76. int b=liczba_bela(n,k);
  77. cout<<"Liczba wypisanych podzialow to: "<<licznik <<endl;
  78. cout<<"Liczba elementow zgodnie z liczba Bella ="<<b<<endl;
  79.  
  80.  
  81. return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement