Вычисление перестановок и сочетаний на языке C

CBeginner
Практиковаться сейчас

Введение

Перестановка и комбинация - это два разных математических понятия. Перестановка - это упорядоченное расположение объектов. Комбинация - это выбор объектов из множества без учета порядка выбранных объектов. В этом лабораторном задании мы научимся вычислять перестановки и комбинации с использованием языка C.

Напишите главную функцию

Сначала создайте новый файл с именем main.c в каталоге ~/project/ и напишите начальный код для включения заголовочных файлов и главной функции.

#include <stdio.h>

int main() {
    printf("Перестановки и комбинации на языке C\n\n");
    // Здесь будет добавлен код для вычисления перестановок и комбинаций
    return 0;
}

Напишите функцию для вычисления факториала

Для вычисления перестановок и комбинаций нам нужно вычислить факториал числа. Факториалы можно вычислять рекурсивно. Добавьте следующий код вне главной функции.

long factorial(int num) {
    if (num == 0) {
        return 1;
    }
    else {
        return num * factorial(num - 1);
    }
}

Эта функция принимает целое число в качестве аргумента и возвращает его факториал.

Напишите функцию для вычисления сочетаний из n по r

Добавьте следующую функцию вне главной функции для вычисления сочетаний из n по r.

long nCr(int n, int r) {
    if (n < r) {
        return -1;
    }
    else {
        return factorial(n) / (factorial(r) * factorial(n - r));
    }
}

Эта функция принимает два целых числа, n и r, в качестве аргументов и возвращает значение сочетаний из n по r. Значение сочетаний из n по r вычисляется путём деления факториала n на произведение факториалов r и n-r.

Напишите функцию для вычисления размещений из n по r

Добавьте следующую функцию вне главной функции для вычисления размещений из n по r.

long nPr(int n, int r) {
    if (n < r) {
        return -1;
    }
    else {
        return factorial(n) / factorial(n - r);
    }
}

Эта функция принимает два целых числа, n и r, в качестве аргументов и возвращает значение размещений из n по r. Значение размещений из n по r вычисляется путём деления факториала n на факториал n-r.

Напишите код управляющего модуля программы

Добавьте следующий код внутри главной функции для ввода значений и отображения результатов.

int main()
{
    int n, r;

    printf("Введите значение n:");
    scanf("%d", &n);
    printf("Введите значение r:");
    scanf("%d", &r);

    printf("nCr равно %ld\n", nCr(n, r));
    printf("nPr равно %ld\n", nPr(n, r));

    return 0;
}

Этот код получает от пользователя значения n и r, вызывает функции nCr() и nPr() для вычисления соответствующих значений и затем отображает их.

Полный код

Завершённый код выглядит следующим образом.

#include <stdio.h>

long factorial(int num) {
    if (num == 0) {
        return 1;
    }
    else {
        return num * factorial(num - 1);
    }
}

long nCr(int n, int r) {
    if (n < r) {
        return -1;
    }
    else {
        return factorial(n) / (factorial(r) * factorial(n - r));
    }
}

long nPr(int n, int r) {
    if (n < r) {
        return -1;
    }
    else {
        return factorial(n) / factorial(n - r);
    }
}

int main()
{
    int n, r;

    printf("Введите значение n:");
    scanf("%d", &n);
    printf("\nВведите значение r:");
    scanf("%d", &r);

    printf("nCr равно %ld\n", nCr(n, r));
    printf("nPr равно %ld\n", nPr(n, r));

    return 0;
}

Резюме

В этом практическом занятии мы научились вычислять перестановки и сочетания на языке C. Мы написали функции для вычисления факториала, сочетаний из n по r и размещений из n по r. Мы также написали код-диспетчер для программы. Следуя шагам, описанным выше, мы можем вычислять перестановки и сочетания для введённых пользователем значений.