方格填数
题目描述
在2行5列的格子中填入1到10的数字。
要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。
如下图所示的2种,就是合格的填法。
请你计算一共有多少种可能的方案。
输出
请输出该整数,不要输出任何多余的内容
代码
暴力列举,终点在于10个数都不一样,循环时需要加条件判断。直接看代码。
#include <iostream>
using namespace std;
int main(){
int x1,x2,x3,x4,x5;
int y1,y2,y3,y4,y5;
int a=0,b,c;
int flag[11];
for(int i=0;i<11;i++)
flag[i]=0;
for( x1=1;x1<=10;x1++){
flag[x1]=1;
for(x2=x1+1;x2<=10;x2++){
if(flag[x2]==1) continue;
else flag[x2]=1;
for( x3=x2+1;x3<=10;x3++){
if(flag[x3]==1) continue;
else flag[x3]=1;
for(x4=x3+1;x4<=10;x4++){
if(flag[x4]==1) continue;
else flag[x4]=1;
for(x5=x4+1;x5<=10;x5++){
if(flag[x5]==1) continue;
else flag[x5]=1;
for(y1=1;y1<=10;y1++){
if(flag[y1]==1) continue;
else flag[y1]=1;
for(y2=y1+1;y2<=10;y2++){
if(flag[y2]==1) continue;
else flag[y2]=1;
for(y3=y2+1;y3<=10;y3++){
if(flag[y3]==1) continue;
else flag[y3]=1;
for(y4=y3+1;y4<=10;y4++){
if(flag[y4]==1) continue;
else flag[y4]=1;
for(y5=y4+1;y5<=10;y5++){
if(flag[y5]==1) continue;
else flag[y5]=1;
if(x1<y1&&x2<y2&&x3<y3&&x4<y4&&x5<y5) {
a++;
}
flag[y5]=0;
}
flag[y4]=0;
}
flag[y3]=0;
}
flag[y2]=0;
}
flag[y1]=0;
}
flag[x5]=0;
}
flag[x4]=0;
}
flag[x3]=0;
}
flag[x2]=0;
}
flag[x1]=0;
}
cout<<a;
return 0;
}
答案是42.