题解 | #6的个数#
6的个数
https://ac.nowcoder.com/acm/contest/13493/A
#include<bits/stdc++.h> using namespace std; int a[10] = {2, 3, 3, 3, 5, 6, 6, 7, 7, 8}; int ans; int main(){ //int a[10] = {2, 3 ,3, 5 ,8 ,6, 3 ,7 ,7, 6}; do{ bool flag1 = false, flag2 = false;//flag1表示之前是否出现递增,flag2表示之前是否出现递减 int cnt = 0; for(int i = 0; i + 1 < 10; i ++){ if(a[i + 1] > a[i]){ flag1 = true; if(flag2){ cnt ++; flag2 = false; flag1 = false;//flag1也要,因为当出现分割点后每次要从新的起点开始算,不受之前的区间影响了(这点想了很久才想清楚,调了好久才发现这个错误) } } else if(a[i + 1] < a[i]){ flag2 = true; if(flag1){ cnt ++; flag1 = false; flag2 = false;//同理 } } else{ } } if(cnt <= 2) ans ++; }while(next_permutation(a, a + 10)); cout << ans; return 0; }