白駿1065:ハンス|パイソン

1420 ワード

質問する


正の整数Xの各位置が等差数列である場合、その数を1つの数と呼ぶ.等差数列とは、連続する2つの数の差が一定の数列を指す.Nが与えられた場合、プログラムを作成し、1以上、N以下の数値を出力します.

すなわち、135(公差2)258(公差3)と等しい数を1つの数と呼ぶ.
1000以下なので、最大値が3桁というのも手がかり!


入力


最初の行は、1000以下の自然数Nを与える.


しゅつりょく


最初の行は、1以上、N以下の数値を出力します.



に答える

def hansu(n):
    cnt = 0
    for i in range(1,n+1):
        num_list = list(map(int, str(i)))
        if i < 100:
            cnt += 1
        elif num_list[1]-num_list[0] == num_list[2]-num_list[1]:
            cnt += 1
    return cnt
n = int(input())
print(hansu(n))
判別関数を与える
関数は次のとおりです.
def関数名(パラメータ):
                소스코드

                return 반환값
救助する

私たちの最終目標は出力個数です.したがって、戻り値はcntであるべきである.
関数ソースコードは、1つの数をカウントするcntを0に初期設定します.

for文を用いて,1~パラメータnを範囲として変数i(数字)を設定する.
n+1までの範囲はrange後の範囲値が-1であるためである.

任意の数値を格納するnum listを作成します.
各数字の桁数を比較するためには、桁数を分けなければなりません.
したがって,まず文字列strに変換し,次にint型map(完全変換)に変換し,リスト化する.

後の数字(i)が100未満の場合は、1桁または2桁です.
各ビット数を比較する必要はなく、無条件に1つの数になります.
したがって、すぐにカウントが増加します.cnt+=1はcnt=cnt+1を表す

その他の場合、一時numリスト(数字を分ける)の2番目のビット数と1番目のビット数の差
3桁目と2桁目の差が等しい場合は、1桁としてカウントします
問題では3桁の自然数のみを比較し,4桁目まで比較する必要はない.

前述したようにreturn cnt.

nを入力します.
関数hansu出力を実行します.