[Algorithm]白駿6603、またPython


白駿6603楽透原文
質問する
ドイツの宝くじ問題.宝くじに当たったらよかったのにまたは1、2、...49から6つの数字を選びます.しかし,{1,2,...49}の数から6以上の数k個を選択して集合sを作成し,その数のみで番号を選択するという戦略である.
すなわち、k=8であれば、1~49の中から8個の数字を選択してSを生成する.S={1,2,3,5,8,13,21,34}の場合、その中から6つの宝くじ番号を選択した場合は28種類ある.
最終的に,集合SとKが与えられると,作成可能な数を選択するすべての方法を見つけることができる.結局問題は簡単でしたが、前の説明で混同されたのは私だけですか?
どうやって解いたの?
つながる.入力値と出力可能な数字の組み合わせだけでいいです.順番は関係ないから.Pythonの長所...
どこをうろうろしてたっけ?
easy~
実は投稿するときはあまり和音を直さないんですけどね(…)なぜ入力したリストにdeepcopyをしなければならないのか...作りながら直す.文法の練習と言うべきだ.本当はSYSも地図もあまり使わずJOINもあまり使わない練習でしたが
from itertools import combinations
import sys
from copy import deepcopy

def solve() :

    while True :
        a = list(map(int,sys.stdin.readline().split(" ")))
        k = a[0]
        S = a[1:]

        if k == 0 : return

        ans = list(combinations(S,6))

        for c in ans :
            print(" ".join(map(str,c)))
        
        print()

if __name__ == "__main__" :
    solve()