■概要
場合の数のうち、円順列について、
机上計算とPythonを使用した計算処理の2種類の解答方法を示す。
■円順列
円順列とは、丸いテーブルに複数人が着席するときの場合の数を算出する方法である。
以下のように、丸テーブルに4人が着席した場合、①のテーブルを時計回りに回すと、②〜④の座り順となる。
この①〜④の場合、座り位置が異なるだけで、各々の隣人は変わらない。
したがって、①〜④の4組の配置は同一の場合の数と考えるため、解答は以下の通り。
4!/ 4
= (4・3・2・1) / 4
= 6 (通り)
▼円順列の公式
n個を円形に並べた時の場合の数は以下の公式を使用する。
■例題
両親と子ども4人が丸テーブルに座る時、以下の問いを求める。
▼問1
家族6人が座る座り方は、何通りあるか。
▼問2
両親が隣り合って座る座り方は、何通りあるか。
■机上計算
▼問1
以下の図のように、6人が丸テーブルに座る場合の数は、
6!/ 6
= (6・5・4・3・2・1) / 6
= 120 (通り)
▼問2
両親(2人)と子ども(4人)と分けて考える必要がある。
また、両親は必ず隣り合っていることが条件であるため、
以下の図のように、両親(2人:B、Cとする)を1人として考える。
5人が丸テーブルに座る場合の数は、
5!/ 5
= (5・4・3・2・1) / 5
= 24 (通り)
両親の座り位置が入れ替わる場合も考慮する必要があるため、求める場合の数は、
24 × 2 = 48 (通り)
■Pythonによる実装
▼フローチャート
▼プログラム仕様
<処理名:円順列を計算する関数>
・引数と戻り値
項目 | 値 | 内容 |
---|---|---|
第1引数 | n | n P r のうち、「n」 |
第2引数 | r | n P r のうち、「r」 |
戻り値 | 計算結果 | 円順列の計算結果 |
・処理概要
入力 | 処理内容 | 出力 |
---|---|---|
– | 戻り値用の初期値をセットする。 初期値:1 | – |
– | 計算用の一時変数を用意する。 初期値:第一引数(n) | – |
– | ■ n P r のうち、「r」の回数分ループ |戻り値用の値に「n」をかける。 |「n」を-1する。 ■ | – |
– | 円順列として、重複分を削除する。 | – |
– | 戻り値として、計算結果を返す。 | 【戻り値】 計算結果 |
▼サンプルコード
# 円順列を算出する関数
def CalCircularPermutation(n: int, r: int) -> int:
# 戻り値の初期値をセット
cal_data = 1
# 計算用一時変数
cal_tmp = n
# nPrのうち、r回数分ループする
for _ in range(r):
# nPrのうち、n(cal_tmp)で掛け算
cal_data = cal_data * cal_tmp
# デクリメント処理
cal_tmp = cal_tmp - 1
# 重複分を削除
cal_data = cal_data / n
# 戻り値を返す
return int(cal_data)
if __name__ == '__main__':
print('問1:', CalCircularPermutation(5, 5), '通り')
print('問2:', CalCircularPermutation(4, 4) * 2, '通り')
▼実行結果
問1: 120 通り
問2: 48 通り