版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36737934/article/details/88620584
题目描述:
方格填数
如下的10个格子
+--+--+--+
| | | |
+--+--+--+--+
| | | | |
+--+--+--+--+
| | | |
+--+--+--+
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
直接上代码:
package wiki.zimo.exam07;
import java.util.Arrays;
public class Demo06 {
public static void main(String[] args) {
int[] a = new int[10];
int count = 0;
for (a[0] = 0; a[0] < 10; a[0]++) {
for (a[1] = 0; a[1] < 10; a[1]++) {
for (a[2] = 0; a[2] < 10; a[2]++) {
for (a[3] = 0; a[3] < 10; a[3]++) {
for (a[4] = 0; a[4] < 10; a[4]++) {
for (a[5] = 0; a[5] < 10; a[5]++) {
for (a[6] = 0; a[6] < 10; a[6]++) {
for (a[7] = 0; a[7] < 10; a[7]++) {
for (a[8] = 0; a[8] < 10; a[8]++) {
for (a[9] = 0; a[9] < 10; a[9]++) {
if (!isRepeat(a)) {
if (judge(a)) {
// System.out.println(Arrays.toString(a));
print(a);
count++;
}
}
}
}
}
}
}
}
}
}
}
}
System.out.println(count);
}
public static void print(int[] a) {
System.out.println(" "+a[0]+a[1]+a[2]);
System.out.println(""+a[3]+a[4]+a[5]+a[6]);
System.out.println(""+a[7]+a[8]+a[9]);
System.out.println();
}
public static boolean judge(int[] a) {
if (Math.abs(a[0] - a[1]) == 1
|| Math.abs(a[0] - a[4]) == 1
|| Math.abs(a[0] - a[3]) == 1 || Math.abs(a[0] - a[5]) == 1) {
return false;
}
if (Math.abs(a[1] - a[2]) == 1
|| Math.abs(a[1] - a[5]) == 1
|| Math.abs(a[1] - a[4]) == 1 || Math.abs(a[1] - a[6]) == 1) {
return false;
}
if (Math.abs(a[2] - a[6]) == 1
|| Math.abs(a[2] - a[5]) == 1) {
return false;
}
if (Math.abs(a[3] - a[4]) == 1
|| Math.abs(a[3] - a[7]) == 1
|| Math.abs(a[3] - a[8]) == 1) {
return false;
}
if (Math.abs(a[4] - a[5]) == 1
|| Math.abs(a[4] - a[8]) == 1
|| Math.abs(a[4] - a[7]) == 1 || Math.abs(a[4] - a[9]) == 1) {
return false;
}
if (Math.abs(a[5] - a[6]) == 1
|| Math.abs(a[5] - a[9]) == 1
|| Math.abs(a[5] - a[8]) == 1) {
return false;
}
if (Math.abs(a[6] - a[9]) == 1) {
return false;
}
if (Math.abs(a[7] - a[8]) == 1) {
return false;
}
if (Math.abs(a[8] - a[9]) == 1) {
return false;
}
return true;
}
public static boolean isRepeat(int[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] == a[j]) {
return true;
}
}
}
return false;
}
}