题目
如下的10个格子
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
分析:
全排列出所有的填数情况,
对每种情况进行检查,
符合条件计数+1;
答案是1580\
代码
public class F方格填数 {
public static int count=0;
public static int arr[]={0,1,2,3,4,5,6,7,8,9};
public static void check(){
int buf[][]=new int[3][4];
buf[0][0]=1000;buf[2][3]=1000;
int k=0;
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
if((i==0&&j==0)||(i==2&&j==3))continue;
buf[i][j]=arr[k];
k++;
}
}
for(int x=0;x<3;x++){
for(int y=0;y<4;y++){
for(int i=-1;i<2;i++){
for(int j=-1;j<2;j++){
if(x+i>=0&&y+j>=0&&x+i<3&&y+j<4&&Math.abs(buf[x+i][y+j]-buf[x][y])==1){
return ;
}
}
}
}
}
count++;
}
public static void qpl(int k){
if(k==10)check();
else{
for(int i=k;i<arr.length;i++){
int t=arr[k];arr[k]=arr[i];arr[i]=t;
qpl(k+1);
t=arr[k];arr[k]=arr[i];arr[i]=t;
}
}
}
public static void main(String[] args) {
qpl(0);
System.out.println(count);
}
}