PTA 输出全排列(20 分)

2017-12-29 17:34:08 浏览数 (1)

7-2 输出全排列(20 分)

请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。

输入格式:

输入给出正整数n(<10)。

输出格式:

输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a​1​​,a​2​​,⋯,a​n​​排在序列b​1​​,b​2​​,⋯,b​n​​之前,如果存在k使得a​1​​=b​1​​,⋯,a​k​​=b​k​​ 并且 a​k 1​​<b​k 1​​。

输入样例:

代码语言:javascript复制
3

输出样例:

代码语言:javascript复制
123
132
213
231
312
321

 第一dfs

代码语言:javascript复制
#include <bits/stdc  .h>
using namespace std;
const int maxn = 1010;
int num[maxn];
void print_per(int n,int *A,int cur)
{
    if(cur==n)
    {
        for(int i=0;i<n;i  )
            printf("%d",A[i]);
        printf("n");
    }
    else
    for(int i=1;i<=n;i  )
    {
        int ok = 1;
        for(int j=0;j<cur;j  )
        {
            if(A[j]==i) ok=0;
        }
        if(ok)
        {
            A[cur]=i;
            print_per(n,A,cur 1);
        }
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i  )
        num[i] = i 1;
    print_per(n,num,0);
}

  第二个就是比较骚了, C stl 函数

代码语言:javascript复制
#include <bits/stdc  .h>
using namespace std;
char getchars(int x)
{
    return (char)(x '0');
}
int main()
{
    string s;
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i  )
        s.push_back(getchars(i));
    cout<<s<<endl;
    while(next_permutation(s.begin(),s.end()))
    {
        cout<<s<<endl;
    }
}

0 人点赞