给定一个数组,任务是使用C++中的STL打印或显示此数组的所有反向排列。对于数组{1,2,3},反向排列意味着:
forward permutations:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
reverse permutations:
3 2 1
3 1 2
2 3 1
2 1 3
1 3 2
1 2 3
例子:
Input: a[] = {1, 2, 3}
Output:
3 2 1
3 1 2
2 3 1
2 1 3
1 3 2
1 2 3
Input: a[] = {10, 20, 30, 40}
Output:
Possible permutations are:
40 30 20 10
40 30 10 20
40 20 30 10
40 20 10 30
40 10 30 20
40 10 20 30
30 40 20 10
30 40 10 20
30 20 40 10
30 20 10 40
30 10 40 20
30 10 20 40
20 40 30 10
20 40 10 30
20 30 40 10
20 30 10 40
20 10 40 30
20 10 30 40
10 40 30 20
10 40 20 30
10 30 40 20
10 30 20 40
10 20 40 30
10 20 30 40
方法:可以使用STL中提供的prev_permutation()函数找到反向排列的数组的下一个可能排列。
句法:
bool prev_permutation (BidirectionalIterator first,
BidirectionalIterator last);
下面是上述方法的实现:
// C++ program to display all permutations
// in reverse order
// of an array using STL in C++
#include
using namespace std;
// Function to display the array
void display(int a[], int n)
{
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
}
// Function to find the permutations
void findPermutations(int a[], int n)
{
// Sort the given array
sort(a, a + n);
reverse(a, a + n);
// Find all possible permutations
cout << "Possible permutations are:\n";
do {
display(a, n);
} while (prev_permutation(a, a + n));
}
// Driver code
int main()
{
int a[] = { 10, 20, 30, 40 };
int n = sizeof(a) / sizeof(a[0]);
findPermutations(a, n);
return 0;
}
输出:
Possible permutations are:
40 30 20 10
40 30 10 20
40 20 30 10
40 20 10 30
40 10 30 20
40 10 20 30
30 40 20 10
30 40 10 20
30 20 40 10
30 20 10 40
30 10 40 20
30 10 20 40
20 40 30 10
20 40 10 30
20 30 40 10
20 30 10 40
20 10 40 30
20 10 30 40
10 40 30 20
10 40 20 30
10 30 40 20
10 30 20 40
10 20 40 30
10 20 30 40
相关文章:在C++中使用STL进行数组的所有排列
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。