Advertisement
desislava_topuzakova

паскал2

Mar 11th, 2018
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.87 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. /* Тъй като е трудно да измислим цялата
  6. задача за триъгълника на Паскал накуп
  7. нека си я разбием на подзадачи,
  8. които знаем как да разрешим.
  9. */
  10.  
  11. int main()
  12. {
  13.     // Първо - нека видим как се смята факториел от n.
  14.     int n;
  15.     cout << "Input n: ";
  16.     cin >> n;
  17.  
  18.     int nFactorial = 1;
  19.  
  20.     for (int i = 1; i <= n; ++i) {
  21.         nFactorial *= i;
  22.     }
  23.  
  24.     cout << "n! is " << nFactorial << endl;
  25.  
  26.     // Дотук - добре. Тъй като ни трябват биномни коефициент
  27.     // нека сглобим формулата за тях n! / (k! * (n - k)!).
  28.     // Вече имаме n!, нека намерим k! и (n - k)!.
  29.  
  30.     int k;
  31.     cout << "Input k: ";
  32.     cin >> k;
  33.  
  34.     int kFactorial = 1, nMinusKFactorial = 1;
  35.  
  36.     for (int i = 1; i <= k; ++i) {
  37.         kFactorial *= i;
  38.     }
  39.  
  40.     for (int i = 1; i <= (n - k); ++i) {
  41.         nMinusKFactorial *= i;
  42.     }
  43.  
  44.     int binomialCoefficient = nFactorial / (kFactorial * nMinusKFactorial);
  45.     cout << "Binomial Coefficient 'n' over 'k' is " << binomialCoefficient << endl;
  46.  
  47.     // Вече имаме всичко нужно да намерим който и да било елемент на триъгълника.
  48.     // Единственото, което ни трябва сега, е да измислим логиката, по която да го направим.
  49.     // Отдолу може да видите един вариант:
  50.  
  51.     // Този цикъл ще ни показва на кой ред се намираме,
  52.     // затова и съм кръстил индексът му "currentRow".
  53.     for (int currentRow = 0; currentRow <= n; ++currentRow) {
  54.  
  55.         // Тук ще смятаме n!.
  56.         nFactorial = 1;
  57.         for (int nIndex = 1; nIndex <= currentRow; ++nIndex) {
  58.             nFactorial *= nIndex;
  59.         }
  60.  
  61.         // Тази единица я извеждаме в началото на всеки ред,
  62.         // тъй като биномният коефициент n над 0 винаги е 1
  63.         // и няма нужда да го смятаме.
  64.         cout << 1;
  65.  
  66.         // Този цикъл ще ни показва на елемента с кой номер се намираме,
  67.         // оттам и името на индекса "currentElem"
  68.         for (int currentElem = 1; currentElem <= currentRow; currentElem++) {
  69.  
  70.             kFactorial = 1;
  71.             for (int kIndex = 1; kIndex <= currentElem; ++kIndex) {
  72.                 kFactorial *= kIndex;
  73.             }
  74.  
  75.             nMinusKFactorial = 1;
  76.             for (int nMinusKIndex = 1; nMinusKIndex <= (currentRow - currentElem); ++nMinusKIndex) {
  77.                 nMinusKFactorial *= nMinusKIndex;
  78.             }
  79.  
  80.             binomialCoefficient = nFactorial / (kFactorial * nMinusKFactorial);
  81.             cout << " " << binomialCoefficient;
  82.         }
  83.  
  84.         cout << endl;
  85.     }
  86.  
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement