問題
{1,2,3,4}の数値配列の全ての組み合わせの順列を作成するプログラムを作りなさい。
ヒント
ヒント1:順列とは
順列は、『異なるn個のものからr個選んで「一列に並べる」』場合の数のことをいいます。
今回は1.2.3.4なので、
4個のものから4個選んで全ての組み合わせパターンの一列を作るということです。
ヒント2:全ての組み合わせパターン
全ての組み合わせパターンは4の階乗で求められます。
4X3X2X1 = 24通りです。
ヒント3:ロジックの考え方
①{1.2.3.4}を格納する配列の変数を用意すること
②既に配列のi番目の要素に対して値を詰めたか、
詰めていないかを判定する真偽値の①と同じ長さの配列を用意すること
③if分岐:1行分の順列を作成できていない場合
for文:配列の長さ分処理を繰り返す
if分岐:配列i番目の要素がまだ値を詰められていない場合
①の配列変数にi番目の数値を代入する
配列i番目をfalse(値を詰めた)にする
i+1番目の配列要素に対して順列作成メソッドを行う(③からの処理を行う)
配列i番目のtrue(値を詰めていない)に戻す
③else:1行分の順列を作成した場合
その1行分の順列をコンソール表示する
答え
答え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
list = [1, 2, 3, 4] def line_up(arr, a): # aは現在順列の始まる位置 if a == len(arr): # aがarrの長さと同じようになった時、配列中の数字、全部順列を生成した場合 print(arr) # 関数を出力して終わり return for i in range(a, len(arr)): arr[a], arr[i] = arr[i], arr[a] # 手順を変わって次の数字を選ぶ line_up(arr, a + 1) # 再帰呼び出す arr[a], arr[i] = arr[i], arr[a] line_up(list, 0) |
コメント