java蓝桥杯之方格填数


方格填数
如下的10个格子
   +--+--+--+
   |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |
+--+--+--+
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

代码:
public class Main {
	static int count=0;
	static int[] v=new int[100];
	static int[] a=new int[100];
	public static void f(int n) {
		if(n>10) {
			//程序是先把10个位置放满数然后再看满足不满足要求,满足count++
			if(abs(a[1]-a[2])>1&&abs(a[1]-a[4])>1&&abs(a[1]-a[5])>1&&abs(a[1]-a[6])>1&&abs(a[2]-a[3])>1&&abs(a[2]-a[5])>1&&abs(a[2]-a[6])>1&&abs(a[2]-a[7])>1&&abs(a[3]-a[6])>1&&abs(a[3]-a[7])>1&&abs(a[4]-a[5])>1&&abs(a[4]-a[8])>1&&abs(a[4]-a[9])>1&&abs(a[5]-a[6])>1&&abs(a[5]-a[8])>1&&abs(a[5]-a[9])>1&&abs(a[5]-a[10])>1&&abs(a[6]-a[7])>1&&abs(a[6]-a[9])>1&&abs(a[6]-a[10])>1&&abs(a[7]-a[10])>1&&abs(a[8]-a[9])>1&&abs(a[9]-a[10])>1)
				count++;
		}
		for(int i=0;i<=9;i++) {
			if(v[i]==0) {//i位置为空用0表示
				v[i]=1; //当为空时放入数字将该位置置1代表有数字放入
				a[n]=i;//有1-10 10个位置,有0-9 10个数,在n的位置放i这个数
				f(n+1);//第n位置放入数之后,往n+1的位置放数字,除非n>10,否则一直往下一个位置放数字直到>10
				v[i]=0;//把第上一轮放完且判断完之后,把每个位置置空,进行下一轮
			}
		}
	}
	private static int abs(int a) {	
		return Math.abs(a);
	}
	public static void main(String[] args) {
		f(1);
		System.out.println(count);
	}

}

发布了89 篇原创文章 · 获赞 24 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/zhangxue1232/article/details/79701170