L1-050. 倒數第N個字符串
時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
陳越
給定一個完全由小寫英文字母組成的字符串等差遞增序列,該序列中的每個字符串的長度固定為 L,從 L 個 a 開始,以 1 為步長遞增。例如當 L 為 3 時,序列為 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。這個序列的倒數第27個字符串就是 zyz。對於任意給定的 L,本題要求你給出對應序列倒數第 N 個字符串。
輸入格式:
輸入在一行中給出兩個正整數 L(2 <= L <= 6)和 N(<= 105)。
輸出格式:
在一行中輸出對應序列倒數第 N 個字符串。題目保證這個字符串是存在的。
輸入樣例:3 7417輸出樣例:
比賽的時候想了好久(還是沒a),開始還想暴力一下......我怕是石樂志....
思路分析:l個字符就是l位的26進制數,告訴我們n是倒數的位置,那么我們求一下正着數的位置,然后將求得的10進制數字轉化為26進制(每位26進制用小寫的26個字符表示),這樣求得的字符串就是外面需要的字符串
代碼如下:
#include<bits/stdc++.h> char a[8]; long long f(int l)//求26的l次方 { long long s=1; for(int i=0;i<l;i++) { s=s*26; } return s; } long long ff(long long x,int l)//將十進制的x轉換為26進制,l為26進制的位數 { int j=0; for(int i=l-1;i>=0;i--) { a[j]=x/(f(i))+'a'; x=x%f(i); j++; } a[l]='\0'; return 0; } int main() { int l,n; scanf("%d %d",&l,&n); long long x=f(l)-(long)n;//將倒數第n個字符變成正數第x個字符 ff(x,l); puts(a); return 0; }
技術在於分享!
