0

次の問題の組み合わせ数を知りたいです。

4 つのセクションがあります。各セクションには 12 のカテゴリが含まれています。各カテゴリには、順番に 3 つのタイプが含まれます。A、B、C。各セクションで 3 つのタイプを選択する必要があります。カテゴリを複数回選択することはできず、各セクションには各タイプの 1 つが必要です。結果は次のようになります。

S1
    C1 TA
    C2 TB
    C3 TC
S2
    C4 TA
    C5 TB
    C6 TC
S5
    C7 TA
    C8 TB
    C9 TC
S4
    C10 TA
    C11 TB
    C12 TC

また

S1
    C1 TC
    C2 TB
    C4 TA
S2
    C3 TB
    C5 TC
    C6 TA
S5
    C7 TC
    C10 TA
    C9 TB
S4
    C11 TC
    C8 TB
    C12 TA

私はこの問題を解決する能力の終わりに達しました。ループを試し、悪い結果を除外するだけでしたが、実際には機能しません。これについて何か助けていただければ幸いです。ありがとう。

4

2 に答える 2

0

このロジックを少し分解する簡単な方法は、次のようになります。

12 のカテゴリをランダムに4 つのセクションに分割する必要があります。randomはこれに適したツールです。

categories = range(1,13) # 1-based
# now you can use random.shuffle to shuffle it in place
import random
random.shuffle(categories) # now categories is shuffled.
# split the categories evenly between the 4 sections
sections = [categories[3*i:3*(i+1)] for i in range(4)]

3 つのタイプを各セクションのカテゴリにランダムに配布する必要があります。

# lets make a function that returns a randomly ordered sequence of types 1,2,3
def rand_types():
    types = [1,2,3]
    random.shuffle(types)
    return types
# now we can use this for each assignment
final = []
for section in sections:
     final.append(zip(section, rand_types()))
# [[(8, 2), (5, 1), (10, 3)], 
#  [(6, 2), (7, 3), (2, 1)], 
#  [(4, 1), (12, 3), (1, 2)], 
#  [(11, 2), (3, 1), (9, 3)]]

を使用したくない場合は、自分でタプルをzip作成できます。(category, type)

for section in sections:
    final.append([])
    for i, t in enumerate(rand_types()):
        final[-1].append((section[i], t))
于 2013-04-02T17:31:15.303 に答える