2009年8月2日日曜日

組み合わせ (combination)

公式

異なるn個のものから異なるr個のものを選ぶ組み合わせの数は

今回は式(2)を実装。階乗 (factoral) で実装したfactorial関数を利用する。

C言語での実装

#include <stdio.h>

/* ---------------------------------------------
  階乗を計算する
  引数1: n 整数
  戻り値 階乗
 ---------------------------------------------*/
int factorial(int n)
{
    int fact = n;

    if (n <= 0) return 1;

    while (--n)
        fact *= n;

    return fact;
}

/* ---------------------------------------------
  組み合わせの総数を計算する
  引数1: n nCrのn
  引数2: r nCrのr
  戻り値 組み合わせの総数
 ---------------------------------------------*/
int combination(int n, int r)
{
    if (r <= 0) return 1;
    return factorial(n) / (factorial(r) * factorial(n - r));
}

/* main */
int main(void)
{
    int n = 5;
    int r = 3;
    int c;

    c = combination(n, r);
    printf("%dC%d = %d\n", n, r, c);

    return 0;
}
実行例
5C3 = 10

0 件のコメント:

コメントを投稿