java 蓝桥杯 六角填数

如图所示六角形中,填入1~12的数字。

使得每条直线上的数字之和都相同。

 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?

说明:创建一个 k1[12]的数组,其中k1[0]=1,k1[1]=8,k1[2]=3,然后按照从上往下,从左往右依次另图中的没有数字的地方为k1[3]~k1[11],即图中*处为k1[6].           可以利用回溯法  遍历所有的情况  得出答案   

答案:10


import  java.util.*;

public class Main
{
	public static void main(String args[])
	{
		int k1[]=new int[12];
		k1[0]=1;k1[1]=8;k1[2]=3;
		boolean kk[]=new boolean[13];   //看这些数字是否被填入过
		kk[1]=kk[8]=kk[3]=true;
		int k2[]={2,4,5,6,7,9,10,11,12};   //可以填取得数字
		
		Put(3,k1,k2,kk);           //3 是下一个需要填入的数组的下标
	}
	public static void Put(int i,int k1[],int k2[],boolean kk[])
	{
		if(i==12)
		{
			if(Check(k1)==true)    //检查是否满足每条边想等的条件
			{
				System.out.println(k1[6]);
				return ;
			}
			return ;
			
		}
		for(int j=0;j<k2.length;j++)
		{
			if(kk[k2[j]]==true)continue;
			else if(kk[k2[j]]==false)     // 说明这个数字还没填入过
			{
				k1[i]=k2[j];
				kk[k2[j]]=true;
			}
			Put(i+1,k1,k2,kk);      //填下一个
			kk[k2[j]]=false;    //回溯法   
		}
	}
	public static boolean Check(int k1[])   //检查6行是否想等
	{
		int t[]=new int[6];
		t[0]=k1[0]+k1[3]+k1[6]+k1[8];
		t[1]=k1[0]+k1[4]+k1[7]+k1[11];
		t[2]=k1[1]+k1[3]+k1[4]+k1[5];
		t[3]=k1[1]+k1[6]+k1[9]+k1[2];
		t[4]=k1[5]+k1[7]+k1[10]+k1[2];
		t[5]=k1[8]+k1[9]+k1[10]+k1[11];
		Arrays.sort(t);
		if(t[0]==t[5])return true;
		else return false;
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值