在2行5列的格子中填入1到10的数字。
要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。
如下图所示的2种,就是合格的填法。
请你计算一共有多少种可能的方案。
分析
模拟,全排列。由于本题只需计算1到10的数字满足要求的方案,全排列复杂度为\(O(10!)\)完全是没有问题的,再根据要求判断即可。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int g[15];
int main()
{
int n = 10;
for(int i = 1; i <= n; i ++ ) g[i] = i;
int ans = 0;
do{
bool ok = true;
for(int i = 1; i <= 5; i ++ ){
if(i == 1){
if(g[6] < g[1]){
ok = false;
break;
}
}else{
if(g[i] > g[i-1] && g[i + 5] > g[i]) continue;
else {
ok =false;
break;
}
}
}
for(int i = 7; i <= 10 ; i ++ ){
if(g[i] > g[i-1]) continue;
else {
ok = false;
break;
}
}
if(ok) ans ++;
}while(next_permutation(g + 1, g + n + 1));
cout << ans << endl;
return 0;
}