ABC336 python Atcoderの記録

問題はこちら
3完

A
"o"がN個並んだ文字列は、 N * "o" と書ける。

N = int(input())
print("L" + N * "o" + "ng")


B
2進数に変換する関数はbin。
その後、右側にある0の個数を数える方法を考えればよい。
末尾から0であるかの判定をしていく方法でもよい。

N = int(input())
def count_trailing_zeros(string):
    # 右側の0の文字数 = 全体の文字数 - 右から0を取り除いた後の文字数
    return len(string) - len(string.rstrip('0')) 
    # MEMO
    #  rstrip : 文字列の右側(末尾)から指定された文字を取り除くメソッド
    #  lstrip という文字列の左側(先頭)から指定された文字を取り除くメソッドもある
print(count_trailing_zeros(str(bin(N))))


C
問題文の"良い整数"(10進数で表記したときに、0,2,4,8のみが出現する)は5つの文字だけで10進数を表していることから、5進数で考えた後に各位の数を2倍にすればよいと思った。
1番小さい5進数は0(5)、2番目に小さい5進数は1(5)だから、N番目に小さい5進数はN-1(5)である。
よってN-1(5)を求め、各位の数値を倍にすればよい。
自画自賛だが、うまく発想できたと思う。

N = int(input())
def to_base_5(n):
    # 5進数に変換する関数
    result = ''
    while n > 0:
        n, remainder = divmod(n, 5)
        result = str(remainder) + result
    return '0' if result == '' else result
str_Quinary = to_base_5(N-1)
print(int(str_Quinary)*2)


D
Cを早めに解けて調子に乗ったが、Dがわからず。
後で追記します。





E





F