prev_permutation()和next_permutation()的简单应用

头文件:#include<algorithm>       using namespace std;//别忘记这个!!!.

函数名:prev_permutation()           //默认升序排列.

bool cmp(int a,int b){              

return a>b;                                  //降序就加上这个cmp函数(类似于sort()函数)

}                                                  //prev_permutation(a,a+n,cmp) 


例题:输入一个不大于9位的数字字符串,按升序输出其所有全排列。

input    :   132

output :   123

               132

               213

               231

               312

               321

#include<bits/stdc++.h>         
using namespace std;
int main(){
	char s[9];
	gets(s);
	int n=strlen(s);
	sort(s,s+n);              //对所有元素升序排序 
	puts(s);                  //输出最小的排列 (1.2.3)
	while(next_permutation(s,s+n))   //升序输出最小排列之后的所有排列 
    {
        puts(s);
    }
    return 0;
	
}


假如题目要求改为降序,可以把代码改成这样:

#include<bits/stdc++.h>
using namespace std;
int cmp(int a,int b){      //这个cmp()可以共用
	return a>b;      
}
int main(){
	char s[9];
	gets(s);
	int n=strlen(s);
	sort(s,s+n,cmp);   //降序排列所有元素
	puts(s);           //输出的排列,是最大的那种情况(3.2.1)
	while(prev_permutation(s,s+n)) //降序输出最大排列之后的所有排列 

    {
        puts(s);
    }
    return 0;
	
}

注意理解 next和prev的含义.通过改变限制条件或者cmp(),使用中可以实现两种函数的互相转化,读者自行体会.

ps:新手一枚,理解颇浅,如有错误,请多包涵,欢迎指出,并补充.



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值