数列重组
作者:互联网
题目描述
小明同学最近喜欢上了排列组合,但是现在有这样的一道题把他难住了,已知有一组数字(2,5,3,6,3,6,7,3,7,8)共10个,对于这组数字进行排列后,可以将排列好的数字分为三个部分,且三个部分都是分别有序的(升序或逆序),小明想知道能够有满足条件的多少种排列方式?输入描述:
无
输出描述:
无
备注:
例如对于重新排列后的一种序列(2, 3, 3, 3, 5, 6, 6, 7, 7, 8)可以分为(2)(3,3,3)(5,6,6,7,7,8)三组或(2,3,3)(3,5,6,6)(7,7,8)三组所以该序列为满足题意的一种排列方式。
代码:
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 5 using namespace std; 6 7 int a[10]={2,5,3,6,3,6,7,3,7,8}; 8 int ans; 9 10 bool cmp(int a,int b){ 11 return a > b; 12 } 13 int main(){ 14 sort(a,a+10); 15 do{ 16 bool ok=false; 17 for(int i=0;i<=7;i++){ 18 for(int j=i+1;j<=8;j++){ // 三个区间所有情况 19 if((is_sorted(a,a+i+1) || is_sorted(a,a+i+1,cmp)) && 20 (is_sorted(a+i+1,a+j+1) || is_sorted(a+i+1,a+j+1,cmp)) && 21 (is_sorted(a+j+1,a+10) || is_sorted(a+j+1,a+10,cmp)) 22 ){ 23 ok=true; 24 break; 25 } 26 } 27 if(ok) break; 28 } 29 if(ok) ans++; 30 }while(next_permutation(a,a+10)); // 先排序后,再用 产生全排列 从小到大 31 cout<<ans<<endl; 32 return 0; 33 }
标签:重组,排列,数列,10,int,bool,include,小明 来源: https://www.cnblogs.com/leoaioliabao/p/14649506.html