Треугольник паскаля, смысл строчки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Не очень ясна эта строчка кода, объясните пожалуйста более развернуто.
return !x ? 1 : (long long)(x*fact(x - 1));
#include <stdio.h>
 
long long fact(long x) {
    return !x ? 1 : (long long)(x*fact(x - 1));
}
 
long long C(long long n,long long k) {
    return (long long)(fact(n) / (fact(n - k)*fact(k)));
}
 
int main() {
    long long stroka, i, j;
    printf("Kol-vo strochek: ");
    scanf("%lld", &stroka);
    printf("\n");
 
    for (i = 0; i < stroka; i++) {
        for (j = 0; j < i+1; j++)
            printf("%lld ", C(i, j));
        printf("\n");
    }
    return 0;
}
И кстати, пытался вывести 21 строку треугольника, но он выдает отрицательные числа. 1 -1 -17 -110 -497 -1692 -4513 -9671 -16924 -24446 -29335 -29335 -24446 -16924 а должен: 1 21 210 1330 5985 20349 54264 116280 203490

Решение задачи: «Треугольник паскаля, смысл строчки»

textual
Листинг программы
long long C(long n, long k) {
    if (k>n/2) k=n-k; // возьмем минимальное из k, n-k.. В силу симметричности C(n,k)=C(n,n-k)
    if (k==1)  return n;
    if (k==0)  return 1;
    long long r=1;
    for (int i=1; i<=k;++i) {
        r*=n-k+i; // очередной множитель числителя
        r/=i;     // очередной множитель знаменателя
    }
    return r;
}

Объяснение кода листинга программы

  1. C(n,k) — функция, которая вычисляет число сочетаний из n элементов по k (long long).
  2. n — количество элементов в наборе.
  3. k — количество элементов, которые мы хотим выбрать из набора.
  4. Если k больше половины от n, то k заменяется на n-k, чтобы использовать формулу симметрии C(n,k)=C(n,n-k).
  5. Если k равно 1, то возвращается n.
  6. Если k равно 0, то возвращается 1.
  7. r=1 — инициализация переменной, которая будет хранить результат.
  8. for (int i=1; i<=k;++i) — цикл, который выполняется k раз.
  9. *r=n-k+i** — очередной множитель числителя, который добавляется к r.
  10. r/=i — очередной множитель знаменателя, который делится на r.
  11. Возвращается значение r.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.4 из 5
Похожие ответы