白駿4673:セルフサービス番号|パイソン

2115 ワード

問題の問題を理解できなかった.
個人的にはセルフサービス番号の解釈が真実ではないと思います.
サンプル出力値31(セルフ番号31)
31+3+1=35で31は35の生成者ではありませんか?
では31はセルフサービス番号ではありませんか?こんな考え...
だから私はセルフサービス番号に関する資料を探しました.
最初の値はコンストラクション関数ではなく、より高い値から始まるコンストラクション関数です...@!

質問する


セルフサービス番号は1949年にインドの数学者D.R.Kaprekarによって命名された.正の整数nについて、d(n)がnおよびnの各ビット数の関数を定義する.例えば、d(75)=75+7+5=87である.
正の整数nが与えられると、その数からn、d(n)、d(d(n)、d(d(d(n))、...無限数列を生成できます.
たとえば、33で始まると、次の数字は33+3+3=39、次の数字は39+3+9=51、次の数字は51+5+1=57となります.このようにして、次の数の列を生成できます.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
nをd(n)の生成者と呼ぶ.上の数列では、33は39の生成者(したがって、与えられた数字33度の生成者->は自作番号者ではないと考えられる...もちろん、他の数字によると33は自作番号者ではないのが正しい)、39は51の生成者、51は57の生成者である.生成者が1つより多い場合もあります.例えば、101には2つの構造関数(91および100)がある.
生成されていない数字を自動番号と呼びます.100未満のセルフサービス番号は全部で13個です.1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000以下のセルフ・サービス番号を出力するプログラムを作成します.


入力


入力していません.


しゅつりょく


10000以下の自己符号を行ごとに1つ追加する順序で出力します.

に答える

numbers = list(range(1,10_001))
remove_list=[]    #생성자 리스트
for num in numbers:
    for n in str(num):
        num += int(n)
    if num <= 10_000:
        remove_list.append(num)
for remove_num in set(remove_list):
    numbers.remove(remove_num)
for self_num in numbers:
    print(self_num)
ちなみに、私は問題を理解していないので、グーグルで探してやっと覚えた解答です.

これは入力値がない問題です.
したがって、numbersは1から10000まで初めて指定されます.
rangeの数字が10001の理由はindexの値が+1であるためです.
なぜ10 001の間に基準の下図を配置し、数字の間に基準の下図を使用して大きな数字を区別するのか.
作成者リスト=remove list!名前がremoveの理由、予想通り、後で削除

for文を使用して、数値の数値をnumと呼びます.
二重for文を使用してnumをstrに変換し、str(num)を範囲nに設定します.
numを文字列str(num)に変換するのは,構造関数を得るには,各ビット数を分散できる必要があるからである.
int型は不可能なのでstr型のみ可能です.

33=33+(3+3)=>39,39構造関数のようにnum+=int(n)で構造関数を求める
num+=int(n)はnum=num+int(n)と同じ

ジェネレータが10000未満の場合、append関数を使用してジェネレータリストremovelistにアップロードします.

remove listには重複する数がたくさんあり、set関数を使用して重複する数を消去できます.
これを範囲とするremove numを作成
最初に生成したリスト番号からremove numを削除

numbers範囲の最終評価self numを指定して出力します!