prev

xiaoxiao2021-02-28  30

头文件:#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:新手一枚,理解颇浅,如有错误,请多包涵,欢迎指出,并补充.

转载请注明原文地址: https://www.6miu.com/read-2632905.html

最新回复(0)