• C/C++语言100题练习计划 74——全排列问题(借助STL实现)


    名人说:故立志者,为学之心也;为学者,立志之事也。—— 王阳明
    进度:C/C++语言100题练习计划专栏,目前74/100

    🥇C/C++语言100题练习专栏计划目的:巩固练习C/C++语言,增强上机、动手实践能力,交流学习!

    一、问题呈现

    1.问题描述

    Problem Description
    输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

    2.输入输出

    Input

    第一行为一个整数n

    Output

    由1至n组成的所有不重复的数字序列,每行一个序列。

    每个数字之间由空格隔开

    3.测试样例

    Sample Input

    3

    Sample Output

    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1

    ★提示:
    1<=n<=9

    二、源码实现

    #include
    #include
    #include
    #include
    using namespace std;
    int a[10];//由于1=
    
    int main()
    {
    	int n;
    	//输入n的大小
    	cin>>n;
    	//循环赋值给数组
    	for(int i=1;i<=n;i++)
    	{
    		a[i]=i;
    	}
    	//首先先输出一个顺序序列
    	for(int i=1;i<=n;i++)
    	{
    		printf("%d ",a[i]);
    	}
    	//输出换行
    	printf("\n");
    	//排列循环输出剩余的序列
    	while(next_permutation(a+1,a+1+n))
    	{
    		for(int i=1;i<=n;i++)
    		{
    			printf("%d ",a[i]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    ★关于STL中的next_permutation函数
    在STL中,除了next_permutation外,还有一个函数prev_permutation,两者都是用来计算排列组合的函数
    前者是求出下一个排列组合,而后者求出上一个排列组合

    所谓 " 下一个 " 和 "上一个 ",举一个简单的例子:
    对序列 {a, b, c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},其中{a, b, c}没有上一个元素,{c, b, a}没有下一个元素。

    三、测试结果

    3
    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1
    
    --------------------------------
    Process exited after 2.447 seconds with return value 0
    请按任意键继续. . .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
    如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心

  • 相关阅读:
    服务器中如何检查端口是否开放
    迅为RK3399开发板Android 系统--打印级别设置(printk日志等级设置)
    python元类(type)
    数字藏品:重塑艺术与科技的新媒介
    linux中断(中断一)
    访问服务器快慢的原因
    【tcpdump命令使用总结】
    《一个程序猿的生命周期》-《发展篇》- 46.2000万预算的项目,为什么跟踪15个月失败了
    培训考试系统如何满足个性化学习需求?
    零基础学Java第二十七天之前端-HTML5详解
  • 原文地址:https://blog.csdn.net/qq_51646682/article/details/126066516