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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36737934/article/details/88620584