当前位置: 代码迷 >> 综合 >> 第7届蓝桥杯大赛个人赛省赛(软件类)真题\Java语言B组\6
  详细解决方案

第7届蓝桥杯大赛个人赛省赛(软件类)真题\Java语言B组\6

热度:25   发布时间:2023-10-27 05:40:16.0

题目描述:


方格填数

如下的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;}
}