給定乙個完全由小寫英文本母組成的字串等差遞增序列,該序列中的每個字串的長度固定為 l,
從 l 個 a 開始,以 1 為步長遞增。例如當 l 為 3 時,序列為
。這個序列的倒數第27個字串就是 zyz。
對於任意給定的 l,本題要求你給出對應序列倒數第 n 個字串。
輸入格式:
輸入在一行中給出兩個正整數 l(2 <= l <= 6)和 n(<= 105)。
輸出格式:
在一行中輸出對應序列倒數第 n 個字串。題目保證這個字串是存在的。
輸入樣例:
3 7417
輸出樣例:
pat此題最暴力的解法是逐個儲存,但規模稍微大一點就不行,這是有規律的序列,運用規律解題才是真正的解法。那麼規律是什麼?類似於求十進位制數每位上的數字,十進位制數的特點是末位上的數字每個9個數字出現一次,所以如果你要得到10進製數的各個位,你必須先保留模10結果,再將原數除以10,迴圈。此思想用在本題亦是如此,相當於得到「26進製數」的各個位,每個位對應乙個字母,這裡是將10進製數看成「26進製數」,而得到各個位,各個位的範圍在0-25之間,如果要轉成字母,只需將a的asc碼加上各個數字即可。需要注意的是,由於模26的結果在0-25之間,如果為0,你得到a,由此可以推出,下標是從0開始的。所以結合本題,下標,即26的l次-n是從0開始的。
本題用到的函式:pow函式,形參型別為double,返回型別為double,若所求下標為m,double型,則m=pow((double)26,(double)l)-n;再將m轉為int,這些操作應該適用於幾乎所有c/c++編譯器,至少輕量級ide cfree支援。如果你將這些操作改為 int m=pow((double)26,(double)l)-n,則當l=2,n=649,即m邏輯上為27時,cfree執行結果為26,但是如果你本題演算法正確,提交至pta平台,g++編譯器可以使你的結果執行正確。如果你改為int m=pow(26,l)-n,則cfree編譯器會報錯,因為它無法在函式入口將形參自動從int轉為double。而上述假設操作在vs環境中均可正確執行,故一般而言,寫第乙個假設情況。
**:
#include
#include
using
namespace std;
intmain()
;while
(l--
)for
(j = i -
1; j >=
0; j--
) cout << a[j]
;return
0;
倒數第N個字串
倒數第n個字串 給定乙個完全由小寫英文本母組成的字串等差遞增序列,該序列中的每個字串的長度固定為 l,從 l 個 a 開始,以 1 為步長遞增。例如當 l 為 3 時,序列為 這個序列的倒數第27個字串就是 zyz。對於任意給定的 l,本題要求你給出對應序列倒數第 n 個字串。輸入格式 輸入在一行中...
倒數第N個字串
給定乙個完全由小寫英文本母組成的字串等差遞增序列,該序列中的每個字串的長度固定為 l,從 l 個 a 開始,以 1 為步長遞增。例如當 l 為 3 時,序列為 這個序列的倒數第27個字串就是 zyz。對於任意給定的 l,本題要求你給出對應序列倒數第 n 個字串。輸入格式 輸入在一行中給出兩個正整數 ...
倒數第N個字串
給定乙個完全由小寫英文本母組成的字串等差遞增序列,該序列中的每個字串的長度固定為 l,從 l 個 a 開始,以 1 為步長遞增。例如當 l 為 3 時,序列為 這個序列的倒數第27個字串就是 zyz。對於任意給定的 l,本題要求你給出對應序列倒數第 n 個字串。輸入格式 輸入在一行中給出兩個正整數 ...