天天看點

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排,于是便可以用另一個數組傳遞每次需要排的三個數.