第几是谁?
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
- 现在有"abcdefghijkl”12个字符,将其按字典序排列,如果给出任意一种排列,我们能说出这个排列在所有的排列中是第几小的。但是现在我们给出它是第几小,需要你求出它所代表的序列.
-
输入
-
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个整数m,它代表着序列的第几小;
输出
- 输出一个序列,占一行,代表着第m小的序列。 样例输入
-
3 1 302715242 260726926
样例输出
-
abcdefghijkl hgebkflacdji gfkedhjblcia
康拓逆展开模板题~~~
#include <stdio.h>
#include <string.h>
char c[12];
bool f[12];
int fac[12];
void init(){
fac[0] = 1;
c[0] = 'a';
for( int i=1 ; i<12 ; i++ ){
c[i] = c[i-1]+1;
fac[i] = fac[i-1] * i;
}
}
void reKantor( int sum ){
int pos;
char ans[12];
strcpy( ans,c );
for( int i=0 ; i<12 ; i++ ){
pos = sum/fac[11-i];
printf( "%c",ans[pos] );
for( int j=pos ; j<12-i ; j++ )
ans[j] = ans[j+1];
sum = sum - pos * fac[11-i];
}
printf( "\n" );
}
int main(){
int t,n;
init();
scanf( "%d",&t );
while( t-- ){
scanf( "%d",&n );
reKantor( n-1 );
}
}
欢迎交流啊~~~