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);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值