语言考试练习题_排列 oj21

时间:2021-06-03 13:32:53

语言考试练习题_排列

发布时间: 2017年5月25日 19:57   最后更新: 2017年5月26日 00:08   时间限制: 1000ms   内存限制: 128M

有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 <algorithm>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
int main()
{

int a[4] = { 0 };
for (int i = 0; i < 4; i++)
scanf("%d", &a[i]);
vector<int> ans1,ans2,ans3,ans4;
sort(a, a + 4);
do
{
if (a[0] == 0)
continue;
ans1.push_back(a[0] * 100 + a[1] * 10 + a[2] * 1);
} while (next_permutation(a, a + 3));

int tmp[3];
tmp[0] = a[0], tmp[1] = a[1], tmp[2] = a[3];
do
{
if (tmp[0] == 0)
continue;
ans2.push_back(tmp[0] * 100 + tmp[1] * 10 + tmp[2] * 1);
} while (next_permutation(tmp, tmp + 3));
tmp[1] = a[2];
do
{
if (tmp[0] == 0)
continue;
ans3.push_back(tmp[0] * 100 + tmp[1] * 10 + tmp[2] * 1);
} while (next_permutation(tmp, tmp + 3));
tmp[0] = a[1];
do
{
if (tmp[0] == 0)
continue;
ans4.push_back(tmp[0] * 100 + tmp[1] * 10 + tmp[2] * 1);
} while (next_permutation(tmp, tmp + 3));
for (int i = 0; i < ans1.size(); i++)
cout << ans1[i] / 100 << " " << ans1[i]%100/10<<" "<<ans1[i]%10<< endl;
for (int i = 0; i < ans2.size(); i++)
cout << ans2[i] / 100 << " " << ans2[i] % 100 / 10 << " " << ans2[i] % 10 << endl;
for (int i = 0; i < ans3.size(); i++)
cout << ans3[i] / 100 << " " << ans3[i] % 100 / 10 << " " << ans3[i] % 10 << endl;
for (int i = 0; i < ans4.size(); i++)
cout << ans4[i] / 100 << " " << ans4[i] % 100 / 10 << " " << ans4[i] % 10 << endl;
return 0;
}