下面的代码主要是用了快速排列函数qsort
用其排序还是很方便的
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 学习库函数qsort*/
int cmp(const void *a, const void *b)
{
return *(char *)a - *(char *)b;//从小到大,反之,从大到小
}
int main()
{
char str[20];
int i, n, m, fact[20] = {1},t;
for (i = 1; i <= 10; i++)
fact[i] = fact[i - 1] * i; //计算1~10的阶乘
while (scanf("%s%d", str, &m) == 2)
{
n = strlen(str);
qsort(str, n, 1, cmp); //给字符串排序
while (n--)
{
t = m / fact[n];
putchar(str[t]); //输出第m个排列的一个字符
m = m % fact[n];
for (i = t; str[i]; i++) //去掉被输出的字符
str[i] = str[i + 1];
}
putchar('\n');
}
return 0;
}