天天看点

OJ.1986: C语言实验——排列

1986: C语言实验——排列

Time Limit: 1 Sec  

Memory Limit: 64 MB

Submit: 81  

Solved: 42

[​​Submit​​][​​Status​​][​​Web Board​​]

Description

有4个互不相同的数字,输出由其中三个不重复数字组成的排列。

Input

4个整数。

Output

Sample Input

1 2 3 4      

Sample Output

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 2 4
1 4 2
2 1 4
2 4 1
4 1 2
4 2 1
1 3 4
1 4 3
3 1 4
3 4 1
4 1 3
4 3 1
2 3 4
2 4 3
3 2 4
3 4 2
4 2 3
4 3 2      
#include <stdio.h>
#include <stdlib.h>

int work(int a[])
{
int i,j,k;
for(j=0;j<3;j++)
            for(i=0;i<3;i++)
                for(k=0;k<3;k++)
                if(i!=j&&i!=k&&k!=j)
    printf("%d %d %d\n",a[j],a[i],a[k]);
}
int main()
{
    int a[4],b[4];
    int i,j,k;
    for(i=0;i<4;i++)
        scanf("%d",&a[i]);
    b[0]=a[0],b[1]=a[1],b[2]=a[2];
    work(b);
    b[0]=a[0],b[1]=a[1],b[2]=a[3];
    work(b);
    b[0]=a[0],b[1]=a[2],b[2]=a[3];
    work(b);
    b[0]=a[1],b[1]=a[2],b[2]=a[3];
    work(b);
    return 0;
}      

本来看着这道题特别简单,把所有可能的组合都输出即可,交题目时才发现,他是有规定顺序的,比如1 2 3 4 先有前三个数1 2 3排,再由1 2 4排,于是便可以用另一个数组传递每次需要排的三个数.