■概要
9人をグループに分ける方法が何通りになるのか、机上計算およびPythonを使用した計算処理の2種類の解答方法を示す。
■組合せ
組合せとは、並び方、順番は関係なく、ある集団からいくつかを選択する方法である。
上図の場合、1〜6の玉から、2つを取り出しているが、「②と⑤」も「⑤と②」も区別しない。
▼組合せの公式
組合せの計算は、順列の計算を行い、そこからダブりの場合の数を割ることで求めることができる。
▼参考
・順列の計算
■例題
9人を以下の問1、問2のようにグループに分ける方法が何通りになるのか調べる。
▼問1
4人、3人、2人の3つのグループに分ける場合の数を求める。
▼問2
A、B、Cの各部屋に3人ずつ分ける場合の数を求める。
■机上計算
▼問1
9人を4人、3人、2人の3つのグループに分ける場合の数を求める方法は以下の通り。
▼問2
9人をA、B、Cの各部屋に3人ずつ分ける場合の数を求める。
■Pythonによる実装
▼フローチャート
組合せを計算する関数について、フローチャートを下図に示す。
▼プログラム仕様
<処理名:重複順列を計算する関数>
・引数と戻り値
項目 | 型 | 内容 |
---|---|---|
第1引数 | int型 | nCrの「n」 |
第2引数 | int型 | nCrの「r」 |
戻り値 | int型 | nCrの計算結果 |
・処理概要
入力 | 処理内容 | 出力 |
---|---|---|
– | 一時変数にnとrを格納する。 | – |
– | nPrとr!の初期値をセットする。 ・初期値 nPr:1 r!:1 | – |
– | ■ループ処理:rの回数分繰り返し |nPrとr!の値を算出する。 |一時変数をデクリメントする。 ■ | – |
– | nCrを計算する。 | – |
– | 戻り値を返す。(int型) | – |
▼サンプルコード
# 組合せを計算する関数
def cal_combination(n: int, r: int) -> int:
# 一時変数にnとrを格納
tmp_n = n
tmp_r = r
# nPrとr!の初期値をセット
n_P_r = 1
r_kaijo = 1
# rの回数分繰り返し
for _ in range(r):
# nPrとr!の値を算出
n_P_r = n_P_r * tmp_n
r_kaijo = r_kaijo * tmp_r
# 一時変数をデクリメント
tmp_r -= 1
tmp_n -= 1
# nCrの計算
n_C_r = n_P_r / r_kaijo
# 戻り値を返す(int型)
return int(n_C_r)
if __name__ == '__main__':
# 問1:4人、3人、2人に分ける
print('問1:', cal_combination(9, 4) * cal_combination(5, 3) * cal_combination(2, 2), '通り')
# 問2:3人ずつを3つの部屋に入れる
print('問2:', cal_combination(9, 3) * cal_combination(6, 3) * cal_combination(3, 3), '通り')
▼実行結果
問1: 1260 通り
問2: 1680 通り
コメント