大学生算法设计与编程挑战赛——low
Description
输出自然数 1 到 nn所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
Input
第一行为一个整数n
Output
由1至n组成的所有不重复的数字序列,每行一个序列。
每个数字之间由空格隔开
这里需要使用到next_permutation(a,a+n)函数;
需要引用的头文件包:
#include <algorithm>
next_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列,同时并改变num数组的值。
另外,需要强调的是,next_permutation()在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数。
完整代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv) {
int n;
cin>>n;
int* arr = new int[n];
for(int i =1;i<=n;i++){
arr[i]=i;
}
do{
for (int i = 1;i <= n;++i)
{
cout << arr[i] << " ";
}
cout << endl;
}while(next_permutation(arr+1,arr+n+1));
return 0;
}