如题所述
采用递归的方法解决最好。
再提供一种初学者可以使用的方法,这个方法比较直接,容易理解:
#include <stdio.h>void main()
{
int i,j,k,m,a[4];
for(i=0;i<4;i++)
scanf("%d",&a[i]);
printf("\n所有排列:\n");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
for(m=0;m<4;m++)
if(i!=j&&i!=k&&i!=m&&j!=k&&j!=m&&k!=m)
printf("%d %d %d %d\n",a[i],a[j],a[k],a[m]);
}
运行示例:
温馨提示:答案为网友推荐,仅供参考
第1个回答 2017-09-11
全排列的题。
用递归就好。代码如下:
#include <stdio.h>#include <stdlib.h>
void func(int *a, int *b, int n, int c)
{
if(n == c)
{
int *t = (int *)malloc(sizeof(int) * n);
int i;
for(i = 0; i<n; i ++)
{
t[b[i]] = a[i];
}
for(i = 0; i<n; i ++)
printf("%d%c", t[i], i!=n-1?' ':'\n');
return ;
}
int i;
for(i = 0; i < n; i ++)
{
if(b[i] == -1)
{
b[i] = c;
func(a,b,n,c+1);
b[i] = -1;
}
}
}
int main()
{
int a[4];
int b[4] = {-1,-1,-1,-1};
int i;
for(i = 0; i < 4; i ++)
scanf("%d",&a[i]);
func(a,b,4,0);
return 0;
}本回答被网友采纳
第2个回答 2017-09-11
百度 4个数 全排列
~
~
~
~
~
~
~
~