排列组合函数next_permutation()
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()的更多相关文章
- python自带的排列组合函数
需求: 在你的面前有一个n阶的台阶,你一步只能上1级或者2级,请计算出你可以采用多少种不同的方法爬完这个楼梯?输入一个正整数表示这个台阶的级数,输出一个正整数表示有多少种方法爬完这个楼梯. 分析:提炼 ...
- python内置函数-排列组合函数
product 笛卡尔积 (有放回抽样排列) permutations 排列 (不放回抽样排列) combinations 组合,没有重复 (不放回抽样组合) combinations_with_re ...
- php 排列组合函数(无重复组合,可重复组合【全排列组合】)
<?php /** * 无重复排列組合 * @Author MAX * @DateTime 2018-09-07T16:28:40+0800 * @param Array $arr 需要排列組合 ...
- R语言学习笔记:choose、factorial、combn排列组合函数
一.总结 组合数:choose(n,k) —— 从n个中选出k个 阶乘:factorial(k) —— k! 排列数:choose(n,k) * factorial(k) 幂:^ 余数:%% 整数商: ...
- HDOJ 1716 排列2(next_permutation函数)
Problem Description Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡 ...
- nyoj19(排列组合next_permutation(s.begin(),s.end()))
题目意思: 从n个数中选择m个数,按字典序输出其排列. pid=19">http://acm.nyist.net/JudgeOnline/problem.php?pid=19 例: 输 ...
- C++ STL next_permutation(快速排列组合)
排列组合必备!! https://blog.csdn.net/bengshakalakaka/article/details/78515480
- ACM~排列组合&&hdu例子
排列组合是数学中的一个分支.在计算机编程方面也有非常多的应用,主要有排列公式和组合公式.错排公式.母函数.Catalan Number(卡特兰数)等. 一.有关组合数学的公式 1.排列公式 P(n ...
- C++全排列函数next_permutation()和prev_permutation()
头文件:#include<algorithm> * * * 1. next_permutation(): next_permutation()函数的返回类型是bool类型. 即:如果有一个 ...
随机推荐
- js json和对象互相转换
http://www.jb51.net/article/44562.htm obj = JSON.parse(string) | obj = jQuery.parseJSON(str) 将JSON字符 ...
- 防止apche列出目录以及下载文件
1.修改httpd.conf,将override none改为override all 2.在需要设置权限的目录上传.htaccess文件,.htaccess文件内容如下: <FilesMatc ...
- python类库26[web2py之基本概念]
一 web2py的应用的执行环境Models,Controllers和views所在的执行环境中,以下对象已经被默认地导入: Global Objects: request,response,ses ...
- linux系统装windows时需要注意的问题
(1) 利用windows安装光盘安装XP.WIN7系统时,sata接口的硬盘要将其设置为兼容模式或者IDE模式才能安装.我认为这些盗版光盘安装系统的软件并没有支持sata接口硬盘的驱动程序才导 ...
- OC 之 const
1. 修饰变量 一般设置传参数的时候 若设置为const, 则在调用过程中不允许修改参数值;(readonly) // *前const: 不能通过指针, 改变p指向的值 const int *p = ...
- PHP错误Warning: Cannot modify header information - headers already sent by解决方法
这篇文章主要介绍了PHP错误Warning: Cannot modify header information - headers already sent by解决方法,需要的朋友可以参考下 今天在 ...
- Python+django部署(一)
之所以 写这篇文章的原因在于django环境的确轻松搭建,之前Ubuntu上安装了,的确很轻松,但是后期我才知道随便做个环境出来很容易到了后面很麻烦,污 染了系统里的python版本,导致系统pyth ...
- javascript 字符串转数字
//把str转换为数字的方式,想起很久以前的一个面试题,说字符转数字的方式有哪些,现在想了想 var str1='4.88',str2='4.8xx'; console.log(parseInt(st ...
- UESTC 1425 Another LCIS
也是一个求最长连续单调区间的问题,不同于HDU 3308LCIS的是,单点更新变成了区间成段增加,没关系同样的方法可破之.由于是成段更新,所以比更新区间小的区间是最大连续区间长度是不变的,所以更新su ...
- Https协议:SSL建立过程分析(也比较清楚,而且有OpenSSL的代码)
web访问的两种方式: http协议,我们一般情况下是通过它访问web,因为它不要求太多的安全机制,使用起来也简单,很多web站点也只支持这种方式下的访问. https协议(Hypertext Tra ...