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

CCBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

順列と組み合わせは、2つの異なる数学的概念です。順列は、特定の順序でオブジェクトを配置することです。組み合わせは、選択されたオブジェクトの順序に関係なく、セットからオブジェクトを選択することです。この実験では、C言語を使って順列と組み合わせをどのように計算するか学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/FileHandlingGroup(["File Handling"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/FunctionsGroup -.-> c/recursion("Recursion") c/FileHandlingGroup -.-> c/create_files("Create Files") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-123209{{"C 言語で順列と組み合わせを計算する"}} c/function_declaration -.-> lab-123209{{"C 言語で順列と組み合わせを計算する"}} c/function_parameters -.-> lab-123209{{"C 言語で順列と組み合わせを計算する"}} c/recursion -.-> lab-123209{{"C 言語で順列と組み合わせを計算する"}} c/create_files -.-> lab-123209{{"C 言語で順列と組み合わせを計算する"}} c/user_input -.-> lab-123209{{"C 言語で順列と組み合わせを計算する"}} c/output -.-> lab-123209{{"C 言語で順列と組み合わせを計算する"}} end

メイン関数を書く

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

#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;
}

階乗関数を書く

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

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

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

nCr を計算する関数を書く

nCr を計算するために、メイン関数の外に次の関数を追加します。

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

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

nPr を計算する関数を書く

nPr を計算するために、メイン関数の外に次の関数を追加します。

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

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

プログラムのドライバーコードを書く

入力を受け取り、結果を表示するために、メイン関数の中に次のコードを追加します。

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;
}

まとめ

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