next_permution(),按照字典序进行排列组合,

括号里的参数为类似sort里面的参数,用法相同

#include <bits/stdc++.h>
using namespace std;
#define Maxn 10

int main(){
    int a[3];
    a[0]=1;a[1]=2;a[2]=3;
    do{
        cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
    }while (next_permutation(a,a+3)); //参数3指的是要进行排列的长度
}//如果存在a之后的排列,就返回true。如果a是最后一个排列没有后继,返回false,每执行一次,a就变成它的后继

  

如果交换a[0],a[1],a[2]的大小,排列的次数会改变

#include <bits/stdc++.h>
using namespace std;
#define Maxn 10

int main(){
    int a[3];
    a[0]=3;a[1]=2;a[2]=1;
    do{
        cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
    }while (next_permutation(a,a+3)); //参数3指的是要进行排列的长度
}

  

例题(白书)p78,字母重排

输入一个字典(******结尾),然后输入若干单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(

不存在输出:(   )输入单词之间用空格或空行隔开,输入单词都不超过6个小写字母组成:

样例输入:

trap given score refund only trap work earn course pepper part
******

resco nfudre aptr sett oresuc

输出

score
refund
part trap trap
:(
course

#include <bits/stdc++.h>
using namespace std;
#define Maxn 10
char MAP[Maxn][Maxn];
char AIM[Maxn][Maxn];
int main(){
    string A;
    string B;
    string C;
    getline(cin,A);
    getline(cin,B);
    getchar();
    getline(cin,C);
    int j = 0;
    int k = 0;
    for( int i = 0; i < A.length(); i++ ){
        if(A[i] == ' '){
            MAP[k][j] = '\0';
            k++;
            j = 0;
        }else{
            MAP[k][j] = A[i];
            j++;
        }
    }
    MAP[k++][j] = '\0';
    set<string>s;
    for(int i = 0; i < k; i++){
        s.insert(MAP[i]);
    }
    int y = 0;
    int t = 0;
    for( int i = 0; i < C.length(); i++ ){
        if(C[i] == ' '){
            AIM[y][t++] = '\0';
            y++;
            t = 0;
        }else{
            AIM[y][t] = C[i];
            t++;
        }
    }
    AIM[y++][t] = '\0';
    int cnt = 0;
    for(int i = 0; i < y; i++){
        sort(AIM[i],AIM[i] + strlen(AIM[i]));
        bool flag = true;
        do{
            for(int j = 0; j < k; j++){
                if(strcmp(AIM[i],MAP[j]) == 0){
                    flag = false;
                    cout << AIM[i] << " ";
                }
            }
        }while( next_permutation(AIM[i],AIM[i] + strlen(AIM[i]) ) );//全排列
        if(flag){
            cout << ":(";
        }
        cout << endl;
    }
}

  

排列组合函数next_permutation()的更多相关文章

  1. python自带的排列组合函数

    需求: 在你的面前有一个n阶的台阶,你一步只能上1级或者2级,请计算出你可以采用多少种不同的方法爬完这个楼梯?输入一个正整数表示这个台阶的级数,输出一个正整数表示有多少种方法爬完这个楼梯. 分析:提炼 ...

  2. python内置函数-排列组合函数

    product 笛卡尔积 (有放回抽样排列) permutations 排列 (不放回抽样排列) combinations 组合,没有重复 (不放回抽样组合) combinations_with_re ...

  3. php 排列组合函数(无重复组合,可重复组合【全排列组合】)

    <?php /** * 无重复排列組合 * @Author MAX * @DateTime 2018-09-07T16:28:40+0800 * @param Array $arr 需要排列組合 ...

  4. R语言学习笔记:choose、factorial、combn排列组合函数

    一.总结 组合数:choose(n,k) —— 从n个中选出k个 阶乘:factorial(k) —— k! 排列数:choose(n,k) * factorial(k) 幂:^ 余数:%% 整数商: ...

  5. HDOJ 1716 排列2(next_permutation函数)

    Problem Description Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡 ...

  6. nyoj19(排列组合next_permutation(s.begin(),s.end()))

    题目意思: 从n个数中选择m个数,按字典序输出其排列. pid=19">http://acm.nyist.net/JudgeOnline/problem.php?pid=19 例: 输 ...

  7. C++ STL next_permutation(快速排列组合)

    排列组合必备!! https://blog.csdn.net/bengshakalakaka/article/details/78515480

  8. ACM~排列组合&amp;&amp;hdu例子

    排列组合是数学中的一个分支.在计算机编程方面也有非常多的应用,主要有排列公式和组合公式.错排公式.母函数.Catalan Number(卡特兰数)等. 一.有关组合数学的公式 1.排列公式   P(n ...

  9. C++全排列函数next_permutation()和prev_permutation()

    头文件:#include<algorithm> * * * 1. next_permutation(): next_permutation()函数的返回类型是bool类型. 即:如果有一个 ...

随机推荐

  1. H5小内容(五)

    Geolocation(地理定位)   基本内容     地理定位 - 地球的经度和纬度的相交点     实现地理定位的方式       GPS - 美国的,依靠卫星定位       北斗定位 - 纯 ...

  2. 如何利用SecureCRT连接Ubuntu12.0.4

    环境描述:虚拟机网络选择NAT连接方式,Ubuntu的版本是Ubuntu12.0.4 1. 先做一个测试,假设现在系统还没有装ssh,用secureCRT连接Ubuntu是出现下面的界面. 实际上,这 ...

  3. 关于ADMM的研究(二)

    关于ADMM的研究(二) 4. Consensus and Sharing 本节讲述的两个优化问题,是非常常见的优化问题,也非常重要,我认为是ADMM算法通往并行和分布式计算的一个途径:consens ...

  4. phpstorm 强大的活动模板 可以自定义注释,代码段,根据cms订制自动提示

    http://jingyan.baidu.com/article/8275fc86badd6346a03cf6aa.html [PHP] phpstorm的使用(1) http://v.youku.c ...

  5. 有关ARM大小端及网络字节序

    http://blog.sina.com.cn/s/blog_62b250b50101ntjs.html

  6. Qt 子窗口内嵌到父窗口中(无边框附体show即可)good

    有时需要把一个子窗口内嵌进入父窗口当中. 我们可以这样做 1.新建一个QWidget 或者QDialog的子类 ClassA(父类为ClassB) 2.在新建类的构造函数中添加设置窗口属性 setWi ...

  7. android java 堆栈的实现

    android和java不提供堆栈的实现,只提供了list,vector,deque得存储结构,对于以前做面向过程语言的程序员来说,总觉得缺少了些什么: Stack.java文件: public cl ...

  8. Android Studio 打包及引用 aar

    Android Studio 打包及引用 aar 1. 简述 在比较大的 Android 项目的开发中,我们经常会遇到工程.jar 包等等之间相互引用的方式.一般我们通过在 gradle 文件中配置依 ...

  9. Listview 异步加载图片之优化篇(有图有码有解释)

    在APP应用中,listview的异步加载图片方式能够带来很好的用户体验,同时也是考量程序性能的一个重要指标.关于listview的异步加载,网上其实很多示例了,中心思想都差不多,不过很多版本或是有b ...

  10. minicom-2.4安装配置

    minicom-2.4安装说明 1.#tar –zxvf minicom-2.4.tar.gz 解压开有连个文件,minicom-2[1].4.tar.gz  和minirc.dfl rpm包方式# ...