【藍橋杯】第五屆-6-六角填數(shù)

題目

如圖【1.png】所示六角形中,填入1~12的數(shù)字。

1.png

使得每條直線上的數(shù)字之和都相同。

圖中,已經(jīng)替你填好了3個數(shù)字,請你計算星號位置所代表的數(shù)字是多少?

請通過瀏覽器提交答案,不要填寫多余的內容。

答案

10

分析

這道題最方便、最快捷、最能想到的必須是暴利求解,把六角星從上到下,從左到右分別編號1~12,然后利用DFS(深度遍歷搜索)遞歸,把所有的可能都試一遍,直到滿足每條直線上和相等則可得到*的解。
代碼里面有兩個數(shù)組a[]vis[]。分別用來存放1~12個數(shù)和記錄哪個數(shù)被使用過,已經(jīng)使用過則記為 true否則記為false,所以初始的時候:

a[1] = 1;
vis[1] = true;

a[2] = 8;
vis[8] = true;

a[12] = 3;
vis[3] = true;

然后從x=1開始運行dfs(int x)函數(shù),求解。

代碼

public class Six {
    static int N = 14;
    static int[] a = new int[N];
    static boolean[] vis = new boolean[N];
    public static void main(String[] args) {
        a[1] = 1;
        vis[1] = true;
        
        a[2] = 8;
        vis[8] = true;
        
        a[12] = 3;
        vis[3] = true;
        
        dfs(1);
    }

    // a是最長數(shù)組,k是子數(shù)組的first index
    private static void dfs(int x){
        if(x==1||x==2||x==12){
            dfs(x+1);
            return;
        }
        
        if(x>12){
            int t[] = new int[6];
            t[0] = a[1] + a[3] + a[6] + a[8];
            t[1] = a[1] + a[4] + a[7] + a[11];
            t[2] = a[2] + a[3] + a[4] + a[5];
            t[3] = a[2] + a[6] + a[9] + a[12];
            t[4] = a[8] + a[9] + a[10] + a[11];
            t[5] = a[12] + a[10] + a[7] + a[5];
            
            for(int i = 1; i< t.length; i++){
                if (t[i]!=t[i-1]) return;
            }
            
            System.out.println("*="+a[6]);
            return;
        }
        
        for(int i = 1; i<13; i++){
            if(!vis[i]){
                vis[i]=true;
                a[x] = i;
                dfs(x+1);
                vis[i]=false;
            }
        }
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容