白駿4673号Pythonアルゴリズム問題
2974 ワード
白駿4673号Pythonアルゴリズム
リンク:https://www.acmicpc.net/step/2
Q.4673
セルフサービス番号は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の生成者、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 = set(range(1, 10000))
remove_set = set() # 생성자가 있는 숫자 set
for num in numbers :
for n in str(num):
num += int(n)
remove_set.add(num) # add: 집합에 요소를 추가할 때
self_numbers = numbers - remove_set # set의 '-' 연산자로 차집합을 구함
for self_num in sorted(self_numbers): # sorted 함수로 정렬
print(self_num)
for n in str(num):
移植においてnumに850が代入されたときpirnt(num)は8、5、および0を出力する.
Reference
この問題について(白駿4673号Pythonアルゴリズム問題), 我々は、より多くの情報をここで見つけました https://velog.io/@dlzagu/백준-4673번-파이썬-알고리즘-문제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol