[伯俊]#4673-セルフサービス番号(Python,Python)
4738 ワード
自動番号付け
https://www.acmicpc.net/problem/4673
私が書いたコード
次のdを求める場合、ジェネレータを文字列に変換し、各ビット数を数字に再変換する方法で、各ビット数の和を比較的容易に求めることができるが、性能面では残数と除算を用いるほうがよい.self_nums = [True] * 10001
for i in range(1, 10001):
if not self_nums[i]:
continue
print(i)
now = i
while True:
next = now
while now > 0:
next += now % 10
now //= 10
if next > 10000:
break
self_nums[next] = False
now = next
集合データ型のコードの使用
これは上記のコードで正解を得てネット検索で見つける方法です.
集合資料型を使用すると、資料の重複を簡単にフィルタできます.
このようにremove setに資料を入れると、繰り返して消えてしまい、後で全体から外すと、自分の番号が簡単に手に入ります.
この方法は私が思ったより速いです.remove_set = set()
for i in range(1, 10001):
d = i
while i > 0:
d += i % 10
i //= 10
remove_set.add(d)
self_nums = sorted(set(range(1, 10001)) - remove_set)
print(*self_nums, sep="\n")
Reference
この問題について([伯俊]#4673-セルフサービス番号(Python,Python)), 我々は、より多くの情報をここで見つけました
https://velog.io/@ms269/백준-4673-셀프-넘버-파이썬-Python-nh2d82wz
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
self_nums = [True] * 10001
for i in range(1, 10001):
if not self_nums[i]:
continue
print(i)
now = i
while True:
next = now
while now > 0:
next += now % 10
now //= 10
if next > 10000:
break
self_nums[next] = False
now = next
remove_set = set()
for i in range(1, 10001):
d = i
while i > 0:
d += i % 10
i //= 10
remove_set.add(d)
self_nums = sorted(set(range(1, 10001)) - remove_set)
print(*self_nums, sep="\n")
Reference
この問題について([伯俊]#4673-セルフサービス番号(Python,Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@ms269/백준-4673-셀프-넘버-파이썬-Python-nh2d82wzテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol