Table of Contents
問題
Problem
1から9までの数字から異なる5個をとって作った順列のうち, 次の条件を満たすものの個数を求めよ
- 奇数番目に必ず奇数がある
- 奇数は必ず奇数番目にある
要素5つの配列を考えたとき, 上記を満たす配列の数を求める問題です. ただし配列のindexは1から始まるものという感じです.
(1)の解答]
奇数番目に必ず奇数があるので,
- index 1, 3, 5に注目した順列
- 残りの偶数indexの順列
の積が答えとなります.
\[\begin{align*} \text{index 1, 3, 5に注目した順列の個数} &= {}_5P_3\\ &= 60 \end{align*}\] \[\begin{align*} \text{index 2, 4に注目した順列の個数} &= {}_6P_2\\ &= 30 \end{align*}\]したがって, 答えは$1800$個.
(2)の解答
偶数はたかだか4個しかないので, 奇数が使用される1個, 2個, 3個で場合分けして計算するのも一つの方法ですが, 対偶をとると(1)と同じ考えで個数を計算することができます.
- 条件: 奇数は必ず奇数番目にある
- 対偶: 奇数番目でないならば, 奇数ではない
- 対偶の言い換え: 偶数番目ならば, 偶数
したがって, (1)を偶数に置き換えたものが答えとなります
\[\begin{align*} \text{index 2, 4に注目した順列の個数} &= {}_4P_2\\ &= 12 \end{align*}\] \[\begin{align*} \text{index 1, 3, 5に注目した順列の個数} &= {}_7P_3\\ &= 210 \end{align*}\]したがって, 答えは$2520$個.
Python Implementation
list sizeのerror判定は実装していないですが, generator functionを用いて網羅的に(1)の答えを リストアップするclassは以下です.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from itertools import permutations
from typing import List
class OddEvenPermutation:
"""
Usage
Solver = OddEvenPermutation(5, [1, 3, 5], [2, 4])
perm = Solver.generator()
print(next(perm))
"""
def __init__(self, length, group_odd: List, group_even:List):
self.length = length
self.group_odd = group_odd
self.group_even = group_even
self.odd_length = int((length + 1) // 2)
self.even_length = self.length - self.odd_length
def generator(self):
for odd_perm in permutations(self.group_odd, self.odd_length):
odd_perm = list(odd_perm)
non_used_odd = list(set(self.group_odd) - set(odd_perm))
total_group = non_used_odd + self.group_even
for even_perm in permutations(total_group, self.even_length):
even_perm = list(even_perm)
combined_perm = []
for i in range(self.even_length):
combined_perm.extend([odd_perm[i], even_perm[i]])
if self.odd_length > self.even_length :
combined_perm.append(odd_perm[-1])
yield combined_perm
Solver = OddEvenPermutation(5, [1, 3, 5, 7, 9], [2, 4, 6, 8])
perm = Solver.generator()
print(len(list(perm)))
>>> 1800
References
統計
Python
math
Linux
Ubuntu 20.04 LTS
Shell
English
git
方法論
Ubuntu 22.04 LTS
統計検定
競技プログラミング
フーリエ解析
前処理
SQL
coding
コミュニケーション
Network
ssh
将棋
Data visualization
Docker
Econometrics
VSCode
statistical inference
GitHub Pages
apt
development
システム管理
Coffee
cloud
数値計算
素数
Book
Font
Metrics
Poetry
Ubuntu 24.04 LTS
architecture
aws
shell
systemctl
テンプレート
データ構造
ポワソン分布
会計分析
文字コード
環境構築
論文
App
Bayesian
Dynamic Programming
Keyboard
Processing
R
Steam
filesystem
quarto
regex
(注意:GitHub Accountが必要となります)