全排列以及next_permutation

Next Permutation代码

//输入数字个数n 再输一个数字m 
//再输入一个排列(比如这个序列是全排列的第p组) 需要输出全排列后第p+m组数
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    int ord[n+1];
    for(int i=1;i<=n;++i)   cin>>ord[i];
    for(int i=1;i<=m;++i){//next_permutation表示往后排一个序列  这个循环后就是往后排m个 
    //同理 prev_permutation表示往前排一个序列  这个循环后就是往前排m个
    	next_permutation(ord+1,ord+1+n);//因为这里的ord从1开始存储的
    	prev_permutation(ord+1,ord+1+n);
    }   
    for(int i=1;i<n;++i)    cout<<ord[i]<<' ';
    cout<<ord[n];
}

//next_permutation运算
输入
5 2
1 2 3 4 5

输出
1 2 4 3 5

//prev_permutation运算
输入
5 2
1 2 4 3 5

输出
1 2 3 4 5

全排列用法

#include<iostream>
#include<algorithm>
using namespace std;
	int main(){
	int ans[3]={1,3,2};
 //	sort(ans,ans+4);   ①注意!
   	do {                            /*注意这步,如果是while循环,则需要提前输出*/
    	for(int i=0;i<3;++i)
        cout<<ans[i]<<" ";
        cout<<endl;
    }while(next_permutation(ans,ans+3));
    return 0;
 }

sort(ans,ans+4) 是将数字进行排序
全排列后输出的第一个是最小的 就是 1 2 3

加上sort()后的输出
1 2 3//从最小的一个开始挨个排
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

不加sort()后的输出
1 3 2//会从给定的第一个序列后往大的排
2 1 3
2 3 1
3 1 2
3 2 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值