藍橋杯 九宮幻方

2021-10-06 02:04:18 字數 1842 閱讀 9027

問題描述

小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1~9不重複的填入乙個3*3的矩陣當中,使得每一行、每一列和每一條對角線的和都是相同的。

三階幻方又被稱作九宮格,在小學奧數里有一句非常有名的口訣:「二四為肩,六八為足,左三右七,戴九履一,五居其中」,通過這樣的一句口訣就能夠非常完美的構造出乙個九宮格來。

4 9 2

3 5 7

8 1 6

有意思的是,所有的三階幻方,都可以通過這樣乙個九宮格進行若干映象和旋轉操作之後得到。現在小明準備將乙個三階幻方(不一定是上圖中的那個)中的一些數抹掉,交給鄰居家的小朋友來進行還原,並且希望她能夠判斷出究竟是不是只有乙個解。

而你呢,也被小明交付了同樣的任務,但是不同的是,你需要寫乙個程式~

輸入格式

輸入僅包含單組測試資料。

每組測試資料為乙個3*3的矩陣,其中為0的部分表示被小明抹去的部分。

對於100%的資料,滿足給出的矩陣至少能還原出一組可行的三階幻方。

輸出格式

如果僅能還原出一組可行的三階幻方,則將其輸出,否則輸出「too many」(不包含引號)。

樣例輸入

0 7 2

0 5 0

0 3 0

樣例輸出

6 7 2

1 5 9

8 3 4

資料規模和約定

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

注意:main函式需要返回0;

只使用ansi c/ansi c++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

笨笨有話說:

我最喜歡這類題目了。既然九宮幻方一共也沒有多少,我就不辭辛勞地乙個乙個寫出來好了。

也不能太過分,好歹用個陣列。

#include

using

namespace std;

int v[3]

[3]=

;int vis[11]

=;bool

check()

if(sum != tmp)

return

false;}

for(

int j =

0;j <

3;j++)if

(sum != tmp)

return

false;}

int t1 = v[0]

[0]+ v[1]

[1]+ v[2]

[2];

int t2 = v[0]

[2]+ v[1]

[1]+ v[2]

[0];

if(t1 == tmp && t2 == tmp)

return

true

;return

false;}

void

dfs(

int x,

int y)

else

cout << v[i]

[j]<<

" ";}}

return;}

if(y >2)

if(v[x]

[y]==0)

}else

}int

main()

}dfs(0

,0);

return0;

}

藍橋杯 九宮幻方

3.九宮幻方 問題描述 小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分。三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。三階幻方又被稱作九宮格,在小學奧數里有一句非常有名的口訣 二四為肩,六八為足,左三右七,戴九履一,五...

藍橋杯 九宮幻方

注意 第一次寫dfs內用了二重迴圈,外層為位置,內層為未使用過的數字,存在先填充了後面又返回填充前面的情況,導致許多重複,按照樣例給出的得出5 120的結果.還是太菜了 後來參考了此部落格 應該是按位置dfs,已經存在資料的位置跳過,直接下乙個位置。此篇部落格僅供記錄錯誤 include using...

藍橋杯 九宮幻方

1.將所有滿足條件的3階幻方列舉出來 使用全排列函式next permutation來實現,函式使用鏈結 2.遍歷所有3階幻方矩陣,統計與輸入矩陣可以匹配的個數 3.include include include include include include using namespace std...