【蓝桥杯】【六角填数】

来源:互联网 发布:淘宝店铺店名怎么改 编辑:程序博客网 时间:2024/04/29 15:29
标题:六角填数

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

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

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

请通过浏览器提交答案,不要填写多余的内容。




分析:我们需要想一个数据结构来存储数据,一般能想到的就是数组了,int[] a由12个元素1~12组成,从上到下从左到右依次编号,然后递归回溯遍历出所有的可能组合。




源码:

public class Test016 {public static void main(String[] args) {int[] a = new int[12];for(int i=0; i<12; i++){a[i] = i+1;}int[] r = new int[6];find(a, 0, r);}//a是最长数组,k是子数组的first indexprivate static void find(int[] a,  int k, int[] r){if(k >= 12){return;}for(int i=k; i<a.length; i++){{//交换int temp = a[k];a[k] = a[i];a[i] = temp;}if(a[0] == 1 && a[1] == 8 && a[11]==3){r[0] = a[0] + a[2] + a[5] + a[7];r[1] = a[7] + a[8] + a[9] + a[10];r[2] = a[10] + a[6] + a[3] + a[0];r[3] = a[1] + a[5] + a[8] + a[11];r[4] = a[11] + a[9] + a[6] + a[4];r[5] = a[4] + a[3] + a[2] + a[1];if(check(r)){//找到答案了System.out.println(a[5]);return;}}find(a, k+1, r);{//回溯int temp = a[k];a[k] = a[i];a[i] = temp;}}}//检查元素个数为6的数组中的每个元素是否相等private static boolean check(int[] r){boolean flag = true;for(int j=0; j<5; j++){if(r[j+1] != r[j]){flag = false;break;}}return flag;}}


最后得出的答案是:10

3 1
原创粉丝点击