搞 了一天 终于搞了个模样出来了。。。
#include <stdio.h>
#include <stdlib.h>
#define N 4
void print(int*);
int fun(int*,int);
int check(int*,int);
int sum=0;
void sort(int *a,int x)
{
int i,j,t;
if( x == N-1 ) {print(a);sum++;}
while(a[x]<N && x<N-1)
{
a[x]++;
while(a[x]<N)
{
for(j=0;j<x;j++)
if(a[x]==a[j])
{
a[x]++;
break;
}
if(j==x) break;
}
if(fun(a,x))
{
for(j=x+1;j<N;j++)
a[j]=check(a,j);
print(a);
sum++;
}
if(x+1 < N-1) sort(a,N-2);
}
if(a[x]==N && x>=1) sort(a,x-1);
}
int fun(int *a,int x)
{
int i;
for(i=0;i<x;i++)
if(a[x]==a[i])
return 0;
return 1;
}
int check(int *a,int n)
{
int i,flag = 1;
a[n]=1;
while(a[n]<=N)
{
for(i=0;i<n;i++)
if(a[n] == a[i])
{
a[n]++;
break;
}
if(i==n) break;
}
return a[n];
}
void print(int *a)
{
int i;
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
}
int main()
{
int a[N]={0};
int i;
for(i=1;i<=N;i++)
a[i-1]=i;
sort(a,N-1);
printf("\nsum=%d\n",sum);
system("pause");
return 0;
}
N=4时 1 2 3 4 共有24种排列 按大到小结果为
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321
sum=24
请按任意键继续. . .
N=5时 1 2 3 4 5 有120种排列
|