一个算法的问题(希望有高手用C解答)

来源:百度知道 编辑:UC知道 时间:2024/06/01 21:18:11
问题具体如下:

给出具体的一个有序数列数(可要0也可不要0 这个不是关键) 要求能打印这N个数的所有排列情况

例如 给出的数为 1,2,3

则希望能打印出为:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

以上是结果

可以证明 当可能出现的情况是N!(上例为 3!=6)

希望有高手可以用C/C++解答 谢谢

小弟我也不是偷懒不想动脑筋

本来是想用递归的想法来解决

但是想到最后 怎么都写不出.....

学艺不精....不好意思

#include<stdio.h>
#include<string.h>

int q(char ch)
{
if('A'<=ch&&ch<='Z') return 2*(ch-65);
else if('a'<=ch&&ch<='z') return 2*(ch-97)+1;
}

void swap(char *a, int k, int m)
{
char tmp;
int i;
if(k==m||a[k]==a[m]) return ;
tmp=a[m];
for(i=m-1; i>=k; i--) a[i+1]=a[i];
a[k]=tmp;
return ;
}

void restore(char *a, int k, int m)
{
char tmp;
int i;
if(k==m||a[k]==a[m]) return;
tmp=a[k];
for(i=k+1; i<=m; i++) a[i-1]=a[i];
a[m]=tmp;
return ;
}

void sort(char *a, int m, int n)
{
int i, j;
for(i=m; i<=n; i++)
for(j=i; j<=n; j++)
if(q(a[j])<q(a[i])) swap(a, i, j);
return;
}

void perm(char *a, int k, int m)
{
int i;
char abv;

if(k==m) {
for(i=0; i<=m; i++)