L1-050. 倒數第N個字符串


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;
}

技術在於分享!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM