题目描述:
有4个互不相同的数字,输出由其中三个不重复数字组成的排列。
输入:
4个整数。
输出:
所有排列
样例输入:
1 2 3 4
样例输出:
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<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<set>
using namespace std;
int a[5];
int b[5];
int c[5];
void full_per(int k, int cnt)
{
if(k == 3)
{
for(int i = 0; i < 3; i++)
printf("%d%c", c[i], i == 2? '\n' : ' ');
return ;
}
for(int i = 1; i <= 4; i++)
{
if(b[i] == 0 && i != cnt)
{
b[i] = 1;
c[k] = a[i];
full_per(k+1, cnt);
b[i] = 0;
}
}
}
int main()
{
for(int i = 1; i <= 4; i++)
cin >> a[i];
full_per(0, 4);
full_per(0, 3);
full_per(0, 2);
full_per(0, 1);
return 0;
}