STL中next_permutation函数快速上手
2017-08-14 17:00
387 查看
用法实验
next_permutation()函数功能是输出所有比当前排列大的排列,顺序是从小到大。例如当前是213,下一个排列就是231.这里是输出0123的全排列实验。
#include<algorithm> #include<iostream> using namespace std; int main() { int a[4]={0,1,2}; do{ cout<<a[0]<<a[1]<<a[2]<<endl; }while(next_permutation(a,a+3)); cout<<a[0]<<a[1]<<a[2]<<endl; return 0; } - 最后一个排列没有下一个排列,用next_permutation会返回false,但是使用了这个方法后,序列会变成字典序列的第一个,如210变成012。 - 当然还有一个prev_permutation()函数功能是输出所有比当前排列小的排列,顺序是从大到小。
具体案例
题目描述
这是一道简单的小学生算术题,问题是这样的:给你四个整型数A,B,C,D,问其中的某一个数字能否通过其他三个数的加减乘除运算得到。每个数只能用一次。如果可以,则输出Yes,否则输出No。比如四个数为1,2,3,6.而1 + 2 + 3 = 6。所以输出Yes。如果四个数为2,2,3,9,则任意的三个数的运算,都不可能让等式成立。所以输出No。提示:在计算机的整型数相除中,5 / 2 = 2,而我们问题中的算术,5 / 2 = 2.5。能帮你的只有这么多了输入
第一行输入一个整数t,表示有t组测试数据。每组数据,输入四个整数,A,B,C,D。其中0 <= A,B,C,D <= 1000.输出
对于每组测试数据,按题意输出Yes或者No。样例输入
21 2 3 6
2 2 3 9
样例输出
YesNo
题解
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; double a[5]; bool ok; void dfs(int step,double ans){ if(ok) return; if(step>2){ if(ans==a[3]) ok=true; return; } for(int i=0;i<4;i++){ if(i==0) dfs(step+1,ans+a[step]); else if(i==1) dfs(step+1,ans-a[step]); else if(i==2) dfs(step+1,ans*a[step]); else if(i==3) dfs(step+1,ans/a[step]); } } int main() { int T; scanf("%d",&T); while(T--){ for(int i=0;i<4;i++) scanf("%lf",&a[i]); ok=false; sort(a,a+4);//先排序 do{ dfs(1,a[0]); if(ok) break; }while(next_permutation(a,a+4)); printf("%s\n",ok?"Yes":"No"); } return 0; }
相关文章推荐
- STL快速全排列函数next_permutation与pre_permutation
- STL/next_permutation()和prev_permutation()函数
- hdu1027 全排列(STL函数next_permutation)
- STL之全排列next_permutation()函数的用法
- 详解STL中next_permutation()函数实现
- STL中的全排列函数next_permutation
- stl全排列next_permutation()与prev_permutation()函数用法
- C++STL中全排列函数next_permutation的使用
- 全排列递归算法与STL:next_permutation()函数
- NYOJ 366 D的小L(从小到大输出排列。STL,next_permutation()函数的学习)
- C++STL中全排列函数next_permutation的使用
- C++ STL next_permutation() & prev_permutation()函数
- HDOJ 1027 Ignatius and the Princess II(找出第m大排列,STL,next_permutation()函数的简单使用)
- 【STL】next_permutation的原理和使用
- 自己实现了一下C++STL中的next_permutation,名为ant_next_permutation,发下代码
- 百练1833:排列(stl:next_permutation)
- POJ1061(STL next_permutation)
- STL 源代码剖析 算法 stl_algo.h -- next_permutation
- HDU 1027 STL中next_permutation的应用
- 快速学习stl(next_premutation)全排列;nyoj会排序的小明