Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- /* Тъй като е трудно да измислим цялата
- задача за триъгълника на Паскал накуп
- нека си я разбием на подзадачи,
- които знаем как да разрешим.
- */
- int main()
- {
- // Първо - нека видим как се смята факториел от n.
- int n;
- cout << "Input n: ";
- cin >> n;
- int nFactorial = 1;
- for (int i = 1; i <= n; ++i) {
- nFactorial *= i;
- }
- cout << "n! is " << nFactorial << endl;
- // Дотук - добре. Тъй като ни трябват биномни коефициент
- // нека сглобим формулата за тях n! / (k! * (n - k)!).
- // Вече имаме n!, нека намерим k! и (n - k)!.
- int k;
- cout << "Input k: ";
- cin >> k;
- int kFactorial = 1, nMinusKFactorial = 1;
- for (int i = 1; i <= k; ++i) {
- kFactorial *= i;
- }
- for (int i = 1; i <= (n - k); ++i) {
- nMinusKFactorial *= i;
- }
- int binomialCoefficient = nFactorial / (kFactorial * nMinusKFactorial);
- cout << "Binomial Coefficient 'n' over 'k' is " << binomialCoefficient << endl;
- // Вече имаме всичко нужно да намерим който и да било елемент на триъгълника.
- // Единственото, което ни трябва сега, е да измислим логиката, по която да го направим.
- // Отдолу може да видите един вариант:
- // Този цикъл ще ни показва на кой ред се намираме,
- // затова и съм кръстил индексът му "currentRow".
- for (int currentRow = 0; currentRow <= n; ++currentRow) {
- // Тук ще смятаме n!.
- nFactorial = 1;
- for (int nIndex = 1; nIndex <= currentRow; ++nIndex) {
- nFactorial *= nIndex;
- }
- // Тази единица я извеждаме в началото на всеки ред,
- // тъй като биномният коефициент n над 0 винаги е 1
- // и няма нужда да го смятаме.
- cout << 1;
- // Този цикъл ще ни показва на елемента с кой номер се намираме,
- // оттам и името на индекса "currentElem"
- for (int currentElem = 1; currentElem <= currentRow; currentElem++) {
- kFactorial = 1;
- for (int kIndex = 1; kIndex <= currentElem; ++kIndex) {
- kFactorial *= kIndex;
- }
- nMinusKFactorial = 1;
- for (int nMinusKIndex = 1; nMinusKIndex <= (currentRow - currentElem); ++nMinusKIndex) {
- nMinusKFactorial *= nMinusKIndex;
- }
- binomialCoefficient = nFactorial / (kFactorial * nMinusKFactorial);
- cout << " " << binomialCoefficient;
- }
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement