C 言語で順列と組み合わせを計算する

CBeginner
オンラインで実践に進む

はじめに

順列と組み合わせは、異なる 2 つの数学的概念です。順列は、特定の順序でオブジェクトを並べることです。組み合わせは、選択されたオブジェクトの順序を考慮せずに、集合からオブジェクトを選択することです。この実験(Lab)では、C 言語を使用して順列と組み合わせを計算する方法を学びます。

main 関数を記述する

まず、~/project/ディレクトリにmain.cという名前の新しいファイルを作成し、ヘッダーファイルをインクルードし、main 関数を記述するための初期コードを記述します。

#include <stdio.h>

int main() {
    printf("Permutation and Combination in C Language\n\n");
    // Code for permutation and combination calculation will be added here
    return 0;
}

階乗関数を記述する

順列と組み合わせを計算するには、数の階乗を計算する必要があります。階乗は再帰的に計算できます。main 関数の外側に以下のコードを追加します。

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

この関数は、整数を引数として受け取り、その階乗を返します。

nCr を計算する関数を記述する

main 関数の外側に、nCr を計算するための以下の関数を追加します。

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

この関数は、n と r の 2 つの整数を引数として受け取り、nCr の値を返します。nCr の値は、n の階乗を、r の階乗と n-r の階乗の積で割ることによって計算されます。

nPr を計算する関数を記述する

main 関数の外側に、nPr を計算するための以下の関数を追加します。

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

この関数は、n と r の 2 つの整数を引数として受け取り、nPr の値を返します。nPr の値は、n の階乗を n-r の階乗で割ることによって計算されます。

プログラムのドライバコードを記述する

main 関数内に、入力を受け取り結果を表示するための以下のコードを追加します。

int main()
{
    int n, r;

    printf("Enter the value of n:");
    scanf("%d", &n);
    printf("Enter the value of r:");
    scanf("%d", &r);

    printf("nCr is %ld\n", nCr(n, r));
    printf("nPr is %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("Enter the value of n:");
    scanf("%d", &n);
    printf("\nEnter the value of r:");
    scanf("%d", &r);

    printf("nCr is %ld\n", nCr(n, r));
    printf("nPr is %ld\n", nPr(n, r));

    return 0;
}

まとめ

この実験(Lab)では、C 言語で順列と組み合わせを計算する方法を学びました。階乗、nCr、および nPr を計算する関数を記述しました。また、プログラムのドライバコードも記述しました。上記のステップに従うことで、ユーザーの入力に対して順列と組み合わせを計算できます。