#jitoa #全排列函数(C++版)

忙忙忙困困困
发布于 2023-11-13 09:01
浏览
0收藏

本博客由 金陵科技学院-开放原子开源社 徐晨璐编写

一:next_permutation()函数,作用是输出所有比当前排列 排列大的排列(顺序为由小到大排)

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    string str;
    cin>>str;
    while(next_permutation(str.begin(),str.end()))
      cout<<str<<endl;
       return 0;
}

/*或者写为:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main(){
    char str[100];
        cout<<"请输入原序列:";
    cin>>str;
    int len=strlen(str);
    while(next_permutation(str,str+len)){
         cout<<str<<endl;
    }
    
    return 0;
}

*/

二:perv_permutation()函数,作用是输出比当前排列小的排列 (顺序:从大到小)

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    string str;
    cout<<"请输入原序列:" ;
    cin>>str;
    while(prev_permutation(str.begin(),str.end()))
      cout<<str<<endl;
    return 0;
}

/* 或写为

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    char str[100];
    cout<<"请输入原序列:" ;
    cin>>str;
     int len=strlen(str);
    while(prev_permutation(str,str+len))
    {
         cout<<str<<endl;
    }
    
    return 0;
}

如果要得到几个数的全排列,还可以对上方的函数进行一些更改
比如对于next_permutation()函数,它只对比自己大的排列起作用,所以可以对输入的序列进行由小到大的排序,因为最后的总个数不包含第一个最小的那个序列,所以要在最后的总数上加1,才是这几个数进行全排列的结果。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int cmp(char a,char b)
{
    return a<b;
}
int main()
{
    char str[100];
    int sum=0;
    cout<<"请输入序列:";
    cin>>str;
     int len=strlen(str);
     sort(str,str+len,cmp);
    while(next_permutation(str,str+len))
    {
         cout<<str<<endl;
         sum++;
    }
    cout<<sum<<endl;
    return 0;
}

分类
标签
已于2023-11-16 17:39:51修改
2
收藏
回复
举报
回复