六角填數|2014年藍橋杯B組題解析第七題-fishers
阿新 • • 發佈:2019-01-18
std 計算 求解 相等 include http 通過 mes esp
六角填數
如圖所示六角形中,填入1~12的數字。
使得每條直線上的數字之和都相同。
圖中,已經替你填好了3個數字,請你計算星號位置所代表的數字是多少?
請通過瀏覽器提交答案,不要填寫多余的內容。
思路:dfs搜索所有方案,參數k表示當前是第k個位置上的搜索
代碼:
#include<iostream> using namespace std; //求解a[6]的值 int a[15]; //從上到下從左到右,存放各個位置填的值 int visited[13]; //判斷是否用過1~12這幾個數 int b[6]; //共6個直線 /*檢查是否滿足條件*/ bool test(){ b[0] = a[2] + a[3] + a[4] + a[5]; b[1] = a[1] + a[3] + a[6] + a[8]; b[2] = a[2] + a[6] + a[9] + a[12]; b[3] = a[5] + a[7] + a[10] + a[12]; b[4] = a[1] + a[4] + a[7] + a[11]; b[5] = a[8] + a[9] + a[10] + a[11]; //判斷是否有不相等的 直接return 不滿足 for(int i=0;i<=5;i++){ for(int j=0;j<=5;j++){ if(b[i]!=b[j]){ return false; } } } return true; } //dfs搜索,參數k表示第幾個位置 void dfs(int k){ if(k == 12){ //...檢查是否滿足要求 if(test()){ cout<<a[6]<<endl; } return; } for(int i=1;i<=12;i++){ if(!visited[i]){ visited[i] = 1; a[k] = i; dfs(k+1); visited[i] = 0; } } } int main(){ //初始化 a[1] = 1; a[2] = 8; a[12] = 3; visited[1] = 1; visited[8] = 1; visited[3] = 1; dfs(3);//從第3個位置開始dfs }
六角填數|2014年藍橋杯B組題解析第七題-fishers