蓝桥杯第七届javaB组第六题
题目要求
方格填数
如下的10个格子
填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
答案 1580
——————————————————————————————————————————————————————————————————————————————————
我自己的做法
这个题我想的很简单,反正没有内存要求,所以直接采取了暴力求解的办法。
先用十个for循环依次对应十个方格,然后根据每一个方格所在位置进行判断是否符合题目要求。。。。。
话不多说,直接上代码
代码
<textarea readonly="readonly" name="code" class="java">
public class 方格填数 {
public static void main(String args[]) {
int[] nums= new int[11];
int temp=0;
for(int i=0;i<=9;i++) {
nums[0]=i;
for(int j=0;j<=9;j++) {
nums[1]=j;
if(Math.abs(nums[0]-nums[1])==1||nums[0]==nums[1]) continue;
for(int k=0;k<=9;k++) {
nums[2]=k;
if(Math.abs(nums[2]-nums[1])==1||nums[2]==nums[1]||nums[0]==nums[2]) continue;
for(int l=0;l<=9;l++) {
nums[3]=l;
if(Math.abs(nums[0]-nums[3])==1||nums[3]==nums[1]||nums[0]==nums[3]||nums[3]==nums[2]) continue;
for(int m=0;m<=9;m++) {
nums[4]=m;
if(Math.abs(nums[0]-nums[4])==1||Math.abs(nums[3]-nums[4])==1||Math.abs(nums[1]-nums[4])==1||nums[3]==nums[4]||nums[0]==nums[4]||nums[4]==nums[2]||nums[4]==nums[1]) continue;
for(int n=0;n<=9;n++) {
nums[5]=n;
if(Math.abs(nums[5]-nums[4])==1||Math.abs(nums[0]-nums[5])==1||Math.abs(nums[1]-nums[5])==1||Math.abs(nums[2]-nums[5])==1||nums[5]==nums[4]||nums[0]==nums[5]||nums[5]==nums[2]||nums[5]==nums[1]||nums[5]==nums[3]) continue;
for(int o=0;o<=9;o++) {
nums[6]=o;
if(Math.abs(nums[5]-nums[6])==1||Math.abs(nums[1]-nums[6])==1||Math.abs(nums[2]-nums[6])==1||nums[6]==nums[4]||nums[0]==nums[6]||nums[6]==nums[2]||nums[6]==nums[1]||nums[6]==nums[3]||nums[6]==nums[5]) continue;
for(int p=0;p<=9;p++) {
nums[7]=p;
if(Math.abs(nums[7]-nums[3])==1||Math.abs(nums[7]-nums[4])==1||nums[7]==nums[4]||nums[0]==nums[7]||nums[7]==nums[2]||nums[7]==nums[1]||nums[7]==nums[3]||nums[7]==nums[5]||nums[7]==nums[6]) continue;
for(int q=0;q<=9;q++) {
nums[8]=q;
if(nums[8]==nums[7]||nums[8]==nums[4]||nums[0]==nums[8]||nums[8]==nums[2]||nums[8]==nums[1]||nums[8]==nums[3]||nums[8]==nums[5]||nums[8]==nums[6]||Math.abs(nums[7]-nums[8])==1||Math.abs(nums[3]-nums[8])==1||Math.abs(nums[4]-nums[8])==1||Math.abs(nums[5]-nums[8])==1) continue;
for(int r=0;r<=9;r++) {
nums[9]=r;
if(Math.abs(nums[9]-nums[8])==1||Math.abs(nums[9]-nums[4])==1||Math.abs(nums[9]-nums[5])==1||Math.abs(nums[9]-nums[6])==1) continue;
for(int r1=0;r1<=8;r1++) {
if(nums[9]==nums[r1]) {
temp--;
break;
}
}
temp++;
}
}
}
}
}
}
}
}
}
}
System.out.println(temp);
}
}
</texearea>