#include using namespace std; int fakt (int n) { int v = 1; for (int i = 1; i <= n; i++) { v = v * i; } return v; } int komb (int n, int k) { return fakt(n) / ( fakt(n - k) * fakt(k) ); } #include int main() { for (int n = 0; n <= 10; n++) { for (int k = 0; k <= n; k++) { cout << setw (3) << komb(n, k) << setw (1) << " "; } cout << endl; } cout << "O.K." << endl; } #include #include using namespace std; int fakt (int n) { if (n <= 1) { return 1; } else { return n * fakt(n - 1); } } int komb0(int n, int k) { return fakt(n) / (fakt(n - k) * fakt(k)); } int komb(int n, int k) { int v = 1; if (k > n / 2) { k = n - k; } for (int i = n; i > n - k; i--) { v = v * i; } for (int i = k; i > 1; i--) { v = v / i; } return v; } const int N = 20; int p [N]; int faktorial(int n) { int v = 0; if (n >= 0 && n < N) { v = p[n]; // vyzvednou z tabulky if (v == 0) // pokud nebylo dosud vypocitano { int k = n; while (k>=0 && p[k] == 0) { k--; } // k == -1 || k>=0 && p[k] != 0 if (k == -1) // neznam ani 0! { p[0] = 1; // znam 0! k++; } while (k < n) { // p[k] obsahuje predpocitanou hodnotu p[k + 1] = (k + 1) * p[k]; k++; } // p[n] obsahuje predpocitanou hodnotu v = p[n]; // vysledek } } return v; } int main() { for (int i = 0; i < N; i++) { p[i] = 0; // p[i] == 0 ... nezname i! } for (int i = 1; i <= 5; i++) { cout << i << " " << faktorial(i) << endl; } for (int i = 13; i >= -1; i--) { cout << i << " " << faktorial(i) << endl; } /* for (int n = 0; n <= 10; n++) { for (int k = 0; k <= n; k++) { cout << setw (3) << komb(n, k) << setw (1) << " "; } cout << endl; } */ cout << "O.K." << endl; }