ロゴ ロゴ

組み合わせ”mCn”を求めるプログラム

こんにちは、じゃた。です。今回はマイフレンドの課題のお手伝いとして少しプログラムを書いたんですが、せっかくなのでここに記録しておこうと思います。ちなみに、言語は毎度おなじみのCです。
|_.)…課題ってことは、こういうの講義でやること多いかもしれないしね。

今回のプログラム記述の際の方針

 さて、組み合わせを計算するプログラムを書いていきましょう。と言っても、まずはどう進めていけばいいのか、大体の方針を考える必要がありますね。今回はたまたま方針が示されていたので簡単でしたが、プログラムを書き始める際の最初の難関はここですよね…。発想というか、考え方というか。やっぱり、プログラム書くなら鍛えるべき能力ですね。
 少し話がそれてしまいましたので、戻りましょう。では、今回の方針について。

1. n!を計算する
2. 順列を計算する
3. 組み合わせを計算する

今回組み合わせを求める際に使用した公式を、以下に示します。

mCn=mPn/nPn

mPn=m!/(m-n)!

n!=n・(n-1)・…・2・1

公式を見れば、なぜこのような方針が示されていたのかがわかりますね。

プログラム

 ということで、前の項目で述べた通りの方針に則ってプログラムを記述しました。

#include<stdio.h>
int comb(int, int);
int perm(int, int);
int fact(int);

int main(void){
    int m = 0, n = 0;
    scanf("%d%d",&m,&n);
    if((0 <= n) && (n <= m)){
        printf("%d\n",comb(m, n)); //解答を計算、表示
    }
    else{
        printf("入力値不正\n");
    }
    return 0;
}

//組み合わせを計算する関数
int comb(int a, int b){
    int ans = 0;
    ans = perm(a, b) / perm(b, b);
    return ans;
}

//順列を計算する関数
int perm(int a, int b){
    int ans = 0;
    ans = fact(a) / fact(a-b);
    return ans;
}

//n!を計算する関数
int fact(int a){
    int ans = 1;
    while(a > 0){
        ans *= a;
        a--;
    }
    return ans;
}

おわりに

実際に数学の公式をプログラムでっていうの、もしかしたら初めてかもしれない…。でもやっぱりプログラムって楽しいですね!!
最後まで見てくれてありがとうございます!See You Next Time!

コメント入力

関連サイト