全排列(STL之next_permutation函数的应用)

全排列
有时候我们遇到全排列问题不知如何下手,特别是新手。不过别担心,STL里面的next_permutation函数可以十分方便的帮助我们处理这类问题。关于next_permutation函数的原理请看上篇博客,下面应用next_permutation函数做两道简单的题目。

题目一:http://acm.fafu.edu.cn/problem.php?id=1426

全排列
Description:
对1-n的数进行全排列,例如n为2的时候,应该输出1 2,2 1。
Input:
只有一个整数n,其中n<=10.当n=0时答案为0。
Output:
1-n的全排列。
Sample Input:
3
Sample Output:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

源代码如下:
#include
#include
using namespace std;
int main(void)
{
    int n,i,per[15];
    scanf("%d",&n);
    if(n == 0) {puts("0");return 0;}
    for(i = 1; i <= n; i++)
    {
        per[i] = i;
        printf("%d%s",per[i],i==n?"\n":" ");
    }
    while(next_permutation(per+1,per+n+1))
        for(i = 1; i <= n; i++)
            printf("%d%s",per[i],i==n?"\n":" ");

    return 0;
}

题目二: http://acm.fafu.edu.cn/problem.php?id=1507
排列2
Description:
现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。
Input:
每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。
Output:
对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。每组输出数据间空一行,最后一组数据后面没有空行。
Sample Input:
1 2 3 4
1 1 2 3
0 1 2 3
0 0 0 0

你可能感兴趣的:(STL之全排列)