AtCoder Beginner Contest 171 C問題
C問題
難易度:茶色
N番目のa~z、aa~zz、aaa~zzzといったアルファベットの並びを求めます。
まず適当に数字を渡されます。
そして数字に対応するアルファベットの並びを出力。
123456789 -> jjddja
アルファベットの文字数は i 個の場合、最大で26** i(の総和) 番目以内の並びになります。
N番目の並びの文字数を求めます。
その後、26で剰余を取得、26進数を求めるようにアルファベットの並びを導きます。
WA
しかしテストケースではWA。
どうやらzzやzzzといった桁数の境目がうまく処理できていなかった。
702 -> zz
とあるべきなのですが、
702 -> az
と表示されます。
702 / 26 = 27→N
剰余:0 → z
N(27) / 26 = 1→N
剰余:1 → a
これが原因。
解決策
y:25 / 26 の場合、商は0。
z:26 / 26 の場合、商は1。
25番目はyなのに、26番目は商が1となるため一桁追加でazとなります。
隣の番号なのにこれはおかしい。
これを防ぐために、最後のアルファベットがzの時限定で
N=N-1とします。
702 / 26 = 27 → N-1 → 26
剰余:0 → z
N(26) / 26 = 1→N
剰余:0 → z
これで無事通りました。
N = int(input()) c,I,ans = 0,1,[] lis = 'abcdefghijklmnopqrstuvwxyz' I_=0 while 26**I+I_<N: I_+=26**I I+=1 for i in range(I): N,mod = divmod(int(N),26) if mod == 0: N-=1 #print('N',N) #print('mod',mod) ans.append(lis[mod-1]) ans.reverse() print(''.join(ans))