PAT乙級問題1005 python解答

1264 ワード

1005.継続(3 n+1)推定(25)
カラズ(Callatz)推測は1001に記載されている.このテーマでは、状況が少し複雑です.
カラズの推測を検証すると,繰返し計算を避けるために,繰返し中に遭遇した各数を記録することができる.例えば、n=3を検証する場合、3、5、8、4、2、1を計算する必要があり、n=5、8、4、2を検証すると、繰り返し計算する必要がなく、カラズの推測の真偽を直接判定することができる.この4つの数はすでに検証3の時に遭遇したため、5、8、4、2は3によって「覆われた」数である.1つの数列のある数nを「キー数」と呼び、nが数列の他の数で上書きできない場合.
検証対象の一連の数値を指定すると、いくつかのキー数を検証するだけで、残りの数値を繰り返し検証する必要はありません.あなたの任務は、これらの重要な数字を見つけて、大きな順に出力することです.
入力フォーマット:各テスト入力には1つのテスト例が含まれ、1行目には正の整数K(<100)が与えられ、2行目にはK個の互いに異なる検証対象の正の整数n(1)が与えられる.
出力フォーマット:各テスト・インスタンスの出力が1行を占め、キー数を大きい順に出力します.数字の間は1つのスペースで区切られていますが、1行の最後の数字の後にはスペースがありません.
サンプルを入力:
6
3 5 6 7 8 11

出力サンプル:
7 6
n=int(input())
list=[int(x) for x in input().split()]
newlist=[]
for i in list:
    newlist.append(i)
for r in list:
    if r in newlist:
        m = r
        while m != 1:
            if m % 2 == 0:
                m = m // 2
            elif m % 2 == 1:
                m = (3 * m + 1) // 2
            if m in list:
                if m in newlist:
                    newlist.remove(m)
newlist.sort()
print(newlist[-1],end='')
if len(newlist)>1:
    for k in range(len(newlist)-1):
        print(' ',end=str(newlist[-2-k]))
print()