#include<stdio.h>
int fun(int n) //在1后面加n个0;经测试可用,可改变值;
{
int i; int a = 1;
for(i = 1; i <= n; i ++)
{
a = a * 10;
}
return a;
}
int funfun(int n) //n的阶乘
{
int a = 1;
while(n >= 1)
{
a = a * n;
n = n - 1;
}
return a;
}
int funfunfun(int n)
{
int a = 0;
while(n >= 1)
{
a = a + funfun(n);
n = n - 1;
}
return a;
}
int main()
{
int p[10010] = {0}; p[0] = 1; p[1] = 12; p[2] = 21; int i; int j; int c,d,e,f,g; int n;
printf("请输入n的全排列,n大于2\n");
scanf("%d", &n);
for(i = 3; i <= n; i ++)
{
c = funfunfun(i - 2);
d = funfunfun(i - 1) - 1;
e = funfunfun(i - 1);
f = i - 2;
for(j = c; j <= d; j++)
{
g = 0;
while(g <= f) //插入法, 2! * 2 + 2! * 1 = 3!
{
p[e] = (p[j] / fun(g)) * fun(g + 1) + (i * fun(g)) + (p[j] % fun(g));
g = g + 1;
e = e + 1;
}
}
for(j = c; j <= d; j++)
{
p[e] = i * fun(f + 1) + p[j];
e = e + 1;
}
}
j = funfunfun(2);
for(j = 3; j <= funfunfun(n) - 1; j ++)
{
printf("%d\n", p[j]);
}
return 0;
}
全排列c非递归实现
最新推荐文章于 2024-03-01 20:43:10 发布