输入L,N 将长度为L的小写字符串序列,比如L=3,序列为aaa,aab,aac,...aba,...zzz,求倒数第N个字符串序列是什么.输入3 7421 得到pat
第一感觉是A,B,C...,Z,AA,AB,AC,...ZZ,AAA,AAB......可以转换成“进制数”表示形式,由于一共26个英文字母,可以转换成26进制表示形式。转换成26进制形式后26进制数1对应A、2对应B....25对应Y,这样Z只能对应26进制数10。而十进制数27转换成26进制数为11即可对应成AA,十进制数52转换成26进制数为20对应为AZ。所有我们需要对能被26整除的正整数进行特殊处理。
#include <bits/stdc++.h> using namespace std; int main() { //zzz zzy zzx ... zza ...zyz int L,n; int ans[11]; cin>>L>>n; //3 7421(10进制下的) int i=L; n-=1; while(n) { ans[i--]=n%26; n/=26; } for(int i=1; i<=L; i++) { printf("%d ",ans[i]); } for(int i=1;i<=L;i++) { printf("%c",'z'-ans[i]); } printf(" "); return 0; }