您的位置:首页 > 编程语言 > Java开发

第七届蓝桥杯javaB组真题解析-方格填数(第六题)

2018-03-16 10:05 281 查看
方格填数如下的10个格子
   +--+--+--+
   |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |
+--+--+--+(如果显示有问题,也可以参看【图1.jpg】)

填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
依旧是一道全排列的题 首先采用全排列 将所有情况列举出来 然后使用一个函数用来判断题中的条件 我我直接采用的暴力判断
import java.util.*;
public class Main{
static int sum =0;
public static void f(int a[],int k){
if(k==a.length-1){
if(t(a))
sum +=1;
return;
}
for(int i=k;i<a.length; i++){
{int t=a[k]; a[k]=a[i]; a[i]=t;}
f(a,k+1);
{int t=a[k]; a[k]=a[i]; a[i]=t;}
}
}
public static boolean t(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[4])==1 || Math.abs(a[1]-a[6])==1 || Math.abs(a[1]-a[5]) == 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[7])==1 || Math.abs(a[4]-a[8])==1 || Math.abs(a[4]-a[9])==1 || Math.abs(a[4]-a[5]) == 1)
return false;
if(Math.abs(a[5]-a[6])==1 || Math.abs(a[5]-a[8])==1 || Math.abs(a[5]-a[9])==1)
return false;
if(Math.abs(a[6]-a[9])==1 || Math.abs(a[7]-a[8])==1 || Math.abs(a[8]-a[9])==1)
return false;
return true;
}
public static void main(String [] args){
int a[] = {0,1,2,3,4,5,6,7,8,9};
f(a,0);
System.out.println(sum);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥