排列(全排,前一个,下一个)

news/2024/5/11 4:05:18/文章来源:https://blog.csdn.net/weixin_62599885/article/details/127732544

目录

一, 前一个排列(字典序更大的最近的一个排列)

 1.1 底层实现

      1.2  prev_permulation()

 二,下一个排列(字典序更小的最近的一个排列)

        1.1 底层实现 

     1.2   next_permulation()

三,全排列

四,元素想等的排列


 

一, 前一个排列(字典序更大的最近的一个排列)

 1.1 底层实现

#include<bits/stdc++.h>
using namespace std;const int maxn=103;int n,a[maxn];int main(){scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&a[i]);int pos,sw;for(pos=n-1;pos>=1;--pos){if(a[pos]>a[pos+1])break;}for(sw=pos+1;sw<=n;++sw){if(a[sw]>a[pos])break;}--sw;// printf("%d %d !\n",pos,sw);swap(a[pos],a[sw]);sort(a+pos+1,a+n+1,greater<int>());for(int i=1;i<=n;++i)printf("%d ",a[i]);puts("");return 0;
}

      1.2  prev_permulation()

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;int main()
{int n;cin >> n;int a[105];for (int i = 0; i < n; i++){cin >> a[i];}prev_permutation(a, a + n);for (int i = 0; i < n; i++){cout<< a[i]<<" ";}return 0;
}

 二,下一个排列(字典序更小的最近的一个排列)

        1.1 底层实现 

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;const int maxn = 103;int n, a[maxn];int main() {cin >> n;for (int i = 1; i <= n; ++i) cin>>a[i];int pos, sw;for (pos = n - 1; pos >= 1; --pos) {if (a[pos] < a[pos + 1])break;//与prev_permulation不同的地方 > 变 <}for (sw = pos + 1; sw <= n; ++sw) {if (a[sw] < a[pos])break;//与prev_permulation不同的地方 > 变 <}--sw;// printf("%d %d !\n",pos,sw);swap(a[pos], a[sw]);sort(a + pos + 1, a + n + 1, greater<int>());for (int i = 1; i <= n; ++i)printf("%d ", a[i]);puts("");return 0;
}

     1.2   next_permulation()

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;int main()
{int n;cin >> n;int a[105];for (int i = 0; i < n; i++){cin >> a[i];}next_permutation(a, a + n);for (int i = 0; i < n; i++){cout<< a[i]<<" ";}return 0;
}

 

三,全排列

        全排列没有现成的函数,我们可以利用 next_permulation() 获得。

1.先将字符串从小到大排序

2.用 do~while 循环,使用next_permultion() 不断获取下一个排列(字典序更小的排列)

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;int main()
{int n;cin >> n;int a[105], b[105];for (int i = 0; i < n; i++){cin >> a[i];}sort(a, a + n);do {for (int i = 0; i < n; i++){cout << a[i] << " ";}cout << endl;} while (next_permutation(a, a + n));return 0;
}

四,元素想等的排列

         is_permutation(),只要元素相同就返回 true ,而不管顺序是否相同

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;int main()
{int n;cin >> n;int a[105],b[105];for (int i = 0; i < n; i++){cin >> a[i];b[i] = a[i];}next_permutation(a, a + n);cout << "a :" << endl;for (int i = 0; i < n; i++){cout << a[i] << " ";}cout << endl;cout << "b :" << endl;for (int i = 0; i < n; i++){cout << b[i] << " ";}cout << endl;if (is_permutation(a, a + n,b, b + n)){cout << "a 与 b 相等\n";}else{cout << "a 与 b 不相等\n";}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_223747.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++基础——函数重载

目录 一.函数 重载的三种形式&#xff1a; 1.参数个数不同的重载函数 2. 类型上的不同重载函数 3. 类型顺序上的不同重载函数 二.函数重载缺省参数 返回值不同&#xff0c;能不能构成函数重载&#xff1f; 重载&#xff1a; 重新赋予意义&#xff0c;可以认为是一词多义&…

AssetBundle检测服务使用指南

熟悉UWA的老朋友都知道&#xff0c;UWA有个经典的免费SaaS服务 - 「在线AssetBundle检测」&#xff0c;可以检测包括纹理、网格、动画片段、材质等项目资源使用情况和具体冗余程度。通过快速查看特定的AssetBundle、资源文件和脚本信息&#xff0c;以及AssetBundle和资源之间的…

JAVA线程池 -clt设计与分析

1. 前言 ctl 是线程池源码中常常用到的一个变量。它的主要作用是记录线程池的生命周期状态和当前工作的线程数。作者通过巧妙的设计&#xff0c;将一个整型变量按二进制位分成两部分&#xff0c;分别表示两个信息。 2. 源码解析 源码部分 /*** The main pool control state,…

Pytorch学习笔记6——时间序列RNN

Pytorch学习笔记6——时间序列 判断态度的二分类问题&#xff1a; 对于长句子不适合&#xff0c;因此需要权值共享&#xff1a; 对于某一层&#xff1a; 上一步输出作为下一步输入&#xff0c;存储语境信息&#xff1a; 自我更新语境信息ht ht是最后一次送入得到的m…

提出创意的方法

提出创意的方法 “我不擅长想出创意。” 你是否经常对自己说这样的话? 在公司的会议和学校的集体工作中总是提不出好点子。 即使提出了很多创意&#xff0c;也会偏向于相同的创意&#xff0c;无法得出有趣的提案。 为了打破这样的状况&#xff0c;这次的博客介绍创造性想法…

排序算法:插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序

排序算法相关总结&#xff0c;涉及的排序算法有&#xff1a;插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序。 这里写目录标题1.插入排序2.冒泡排序3.选择排序4.希尔排序5.堆排序6.快速排序总结稳定性概念: 假定在待排序的记录序列中&#xff0c;存在多个具有相同的…

缓冲区的管理

文章目录什么是缓冲区&#xff1f;有什么作用&#xff1f;单缓冲单缓冲和双缓冲通信时的区别循环缓冲区缓冲池什么是缓冲区&#xff1f;有什么作用&#xff1f; 缓冲区是一个存取区域&#xff0c;可以由专门的硬件寄存器组成&#xff0c;也可以用内存作为缓冲区&#xff0c;本节…

Python中的几种推导式用法,先收藏再说......

嗨害大家好鸭&#xff01;我是小熊猫❤ 今天我们来整点非常干的干货&#xff1a; 源码、资料电子书点击此处 Python 推导式是一种独特的数据处理方式&#xff0c; 可以从一个数据序列构建另一个新的数据序列的结构体。 Python 支持各种数据结构的推导式&#xff1a; 列表(li…

D. Maximum Sum on Even Positions(最大连续字段和)

Problem - 1373D - Codeforces 题意: 给你一个由n个整数组成的数组a。数组的索引从零开始&#xff08;即第一个元素是a0&#xff0c;第二个是a1&#xff0c;以此类推&#xff09;。 你最多可以扭转这个数组的一个子数组&#xff08;连续子段&#xff09;。回顾一下&#xff0c…

[附源码]计算机毕业设计JAVAjsp不回头药店药品管理系统

[附源码]计算机毕业设计JAVAjsp不回头药店药品管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SS…

【Prometheus】什么是prometheus?prometheus简介

本文目录 一、什么是prometheus&#xff1f; 二、体系结构概述 三、适用场景 四、不适用的场景 一、什么是prometheus&#xff1f; Prometheus官网 Prometheus开源代码 From metrics to insight Power your metrics and alerting with the leading open-source monitoring…

随想录一刷Day48——动态规划

文章目录Day48_动态规划29. 打家劫舍30. 打家劫舍 II31. 打家劫舍 IIIDay48_动态规划 29. 打家劫舍 198. 打家劫舍 思路&#xff1a; 题目的关键是&#xff0c;不能偷相邻的两个屋子&#xff0c;即只能偷上一个屋子不偷当前屋子&#xff0c;或者不偷上一个屋子偷当前屋子。 d…

LeetCode刷题(python版)——Topic57插入区间

一、题设 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的话&#xff0c;可以合并区间&#xff09;。 示例 1&#xff1a; 输入&#xff1a;interva…

ServletConfig和ServletContext接口

一、ServletConfig接口详解 1、简介 Servlet 容器初始化 Servlet 时&#xff0c;会为这个 Servlet 创建一个 ServletConfig 对象&#xff0c;并将 ServletConfig 对象作为参数传递给 Servlet 。通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。一个 Web 应用中…

【仿牛客网笔记】 Redis,一站式高性能存储方案——Redis入门

Redis可以开发对性能要求较高的功能。还可以利用Redis重构我们现有的功能。 NoSQL关系型数据库之外的统称。 快照有称为RDB 以快照的形式 不适合实时的去做&#xff0c;适合一段时间做一次。 日志又称AOF 以日志的形式每执行一次就存入到硬盘中&#xff0c;可以做到实时的存储以…

【python的静态方法,classmethod方法和__call___魔法方法】

classmethod魔法方法和staticmethodstaticmethod&#xff0c;静态方法classmethod&#xff0c;绑定类方法__call__&#xff0c;可调用类类方法staticmethod&#xff0c;静态方法 在python中&#xff0c;使用静态方法可以实现不需要实例化对象的绑定就可以直接调用的函数&#…

【Unity3D】游戏物体操作 ④ ( 选中多个游戏物体操作 | 复制选中物体 | 聚焦选中物体 | 激活、禁用选中物体 | 对齐选中物体 )

文章目录一、选中多个游戏物体操作1、Scene 场景窗口选中多个物体2、Hierarchy 层级窗口选中多个物体二、复制选中物体1、使用 " Ctrl D " 快捷键复制物体2、使用 右键菜单 | Duplicate 选项复制三、聚焦选中物体四、激活、禁用选中物体五、对齐选中物体一、选中多个…

计算机组成原理浮点数表示

浮点数表示 浮点数的表示分为阶码和尾数&#xff1b; 比如3.026*1011;阶码是11;尾数是3.026&#xff1b; 对于阶码&#xff1a; 阶符为正&#xff0c;小数点向后移n位&#xff08;n表示阶的大小&#xff09;; 阶符为负&#xff0c;小数点向前移n位&#xff08;n表示阶的大小&a…

AttributeError: ‘bytes‘ object has no attribute ‘encode‘异常解决方案

AttributeError: bytes object has no attribute encode是&#xff1a;“字节”对象没有属性的编码的意思。 很明显&#xff0c;是编码格式的问题&#xff0c;例如&#xff1a;已经是byte格式的字符串类型&#xff0c;二次进行encode的时候就会出现这个bug&#xff0c;示例如下…

【猿创征文】Vue3 企业级优雅实战 - 组件库框架 - 1 搭建 pnpm monorepo

前两篇文章分享了基于 vite3 vue3 的组件库基础工程 vue3-component-library-archetype 和用于快速创建该工程的工具 yyg-cli&#xff0c;但在中大型的企业级项目中&#xff0c;通常会自主搭建这些脚手架或加速器。优雅哥希望每位前端伙伴能知其所以然&#xff0c;故接下来的文…