2009年8月1日土曜日

順列 (permutation)

公式

異なるn個のものからr個とって1列に並べる順列の数は

今回は式(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 nPrのn
  引数2: r nPrのr
  戻り値 順列組み合わせの総数
 ---------------------------------------------*/
int permutation(int n, int r)
{
    if (r <= 0) return 1;
    return factorial(n) / factorial(n - r);
}

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

    p = permutation(n, r);
    printf("%dP%d = %d\n", n, r, p);

    return 0;
}
実行例
5P3 = 60

0 件のコメント:

コメントを投稿