Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語でnPr(順列)を計算するプログラムの書き方

本記事では、n個の中からr個を選んで並べる順列「nPr」の値を、C言語を使って計算する方法を解説します。ここで、Pは順列を表し、nは全体の要素数、rは並べる要素の数を意味します。

順列とは、データを一定の順序に従って並べることを指します。順列と組み合わせの違いは、順列が「並べ方」の総数を求めるのに対し、組み合わせは集合から要素を「選び方」の総数を求めるという点にあります。

順列を求めるための公式は以下の通りです。

nPr = (n!)/(n-r)!

計算例

入力:n=5、r=2
出力:20

この例では、5個の要素から2個を選んで並べる方法が20通りあることを示しています。

アルゴリズム

開始
ステップ1:nPrの値を計算する関数を宣言する
    int cal_n(int n)
        IF n <= 1
            Return 1
    return n*cal_n(n-1)
ステップ2:最終的なnPrを求める関数を宣言する
    int nPr(int n, int r)
        return cal_n(n)/cal_n(n-r)
ステップ3:main()内で処理を行う
    変数を int n=5, r=2 として宣言する
    nPr(n, r) の結果を出力する
終了

C言語による実装例

#include<stdio.h>
// nPr用に階乗を計算する関数
int cal_n(int n){
    if (n <= 1)
        return 1;
    return n*cal_n(n-1);
}
// 最終的なnPrを計算する関数
int nPr(int n, int r){
    return cal_n(n)/cal_n(n-r);
}
int main(){
    int n=5, r=2;
    printf("value of %dP%d is %d", n, r, nPr(n, r));
    return 0;
}

実行結果

value of 5P2 is 20

このプログラムでは、再帰的に階乗を計算するcal_n関数を定義し、その結果を利用してnPr関数が「n! ÷ (n-r)!」を求めています。大きな数を扱う場合はオーバーフローに注意し、必要に応じてlong long型などを使用することをおすすめします。

  1. 正方形に内接する円の面積を求めるC言語プログラム

    正方形に内接する円とは、正方形の四つの辺すべてに接する円のことです。このとき、内接円の直径は正方形の一辺の長さと等しくなります。内接円の面積は、次の公式で計算できます。面積 = (π / 4) × a × aここで「a」は正方形の一辺の長さです。これは、内接円の半径が「a / 2」になるため、一般的な円の面積の公式「π × r2」に代入すると「π × (a/2)2 = (π/4) × a2」となることに基づいています。プログラムのロジック内接円の面積は、公式「((π / 4) × a × a)」を用いて計算します。そのために、数学的に 22/7 すなわち 3.14 とされる円周率(π)の値をあ

  2. sin(x)とcos(x)の値を計算するC++プログラムの解説

    sin(x)とcos(x)の値を計算するC++プログラム 本記事では、角度を入力として受け取り、その角度に対応するsin(x)(正弦)とcos(x)(余弦)の値を計算して結果を表示するC++プログラムを解説します。ライブラリ関数に頼らず、テイラー展開(マクローリン展開)を用いて数値を近似する手法を紹介します。 sin(x)とは sin(x)は三角関数の一つで、角度xに対する正弦の値を求めるために使用されます。直角三角形では、斜辺に対する対辺の比として定義されます。 $$\sin (x) = \displaystyle\sum\limits_{k=0}^\infty \frac{(-1)^{k