第12回ブルーブリッジカップの3番目のシミュレーションゲーム-2021年にランクイン

1.問題の説明:

Excelでは、列1から列26までの列名はAからZまでです。列27から、列名は2文字で構成されます。列27から列702までの列名はAAからZZまでです。次の列は、3文字と4文字で表されます。すみません、2021列の列名は何ですか?これは空欄に記入する質問です。結果を計算して送信するだけです。この質問の結果は整数です。回答を送信するときにこの整数を入力するだけで、余分なコンテンツを入力してもスコアは付けられません。

2.思考分析:

問題を分析すると、実際には基数変換の問題であることがわかります。これは、10進数から26への変換と見なすことができます。これは、10進数から他の基数への変換に似ています。方法は、現在の基数を除算することでもあります。余りを得るには、毎回26で割り、余りに対応する文字を順番に連結する必要があります。最初に、長さが26のリストが26文字に対応することを宣言できます。リストから現在の余り真ん中の現在の文字を取り出すだけです。2番目の方法は、計算量がそれほど多くないため、純粋な手計算です。直接計算も可能です。

3.コードは次のとおりです。

if __name__ == '__main__':
    remainder = list()
    # 生成列表中的内容
    for i in range(26):
        remainder.append(chr(65 + i))
    # 输出测试结果看生成的结果是否正确
    print(remainder)
    n = 2021
    res = ""
    while n != 0:
        # 对应索引的位置需要减去1
        res = remainder[n % 26 - 1] + res
        n //= 26
    print(res)
if __name__ == '__main__':
    print(2021 // (26 * 26))
    print(2021 % (26 * 26))
    # 第二位为Y
    print(669 // 26)
    print(669 % 26)

    # 第一位为S
    for i in range(19):
        if i == 18: print(chr(i + 65))
    # 所以最终三个数字为: "BYS"

 

おすすめ

転載: blog.csdn.net/qq_39445165/article/details/115145874