歷屆試題 九宮幻方
時間限制:1.0s 記憶體限制:256.0mb
問題描述
小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將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
不能通過工程設定而省略常用標頭檔案。
提交程式時,注意選擇所期望的語言型別和編譯器型別。
--------------
笨笨有話說:
我最喜歡這類題目了。既然九宮幻方一共也沒有多少,我就不辭辛勞地乙個乙個寫出來好了。
也不能太過分,好歹用個陣列。
分析:笨笨說的超級對,可以自己把所有的九宮幻方寫出來,一共也就是8中,旋轉和對稱可以得到。
大概這樣轉就行了
6 7 2
1 5 9
8 3 4
8 1 6
3 5 7
4 9 2
4 3 8
9 5 1
2 7 6
2 9 4
7 5 3
6 1 8
對稱的就更好寫了,中間位置不變,左右對調即可。
也不用非寫成3*3的矩陣,可以一行一行的壓平。
九種情況寫出來是這樣的,扔進乙個string陣列中
672159834 816357492 438951276 294753618
276951438 618753294 834159672 492357816
然後寫乙個函式進行一一配對即可,將當前的與八個分別進行匹配,並記錄下來可以得到的個數(cnt)。若是為1,則輸出ans,否則輸出too many!
具體看**,需要注意輸入輸出格式的轉換。
/*
歷屆試題 九宮幻方
*/#include#includeusing namespace std;
string ss= ;
string ans;//儲存唯一結果
歷屆試題 九宮幻方
問題描述 小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。三階幻方又被稱作九宮格,在小學奧數里有一句非常有名的口訣 二四為肩,六八為足,左三右七,戴九履一,五居其中 通過這...
歷屆試題 九宮幻方
問題描述 小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。三階幻方又被稱作九宮格,在小學奧數里有一句非常有名的口訣 二四為肩,六八為足,左三右七,戴九履一,五居其中 通過這...
歷屆試題 九宮幻方
問題描述 小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。三階幻方又被稱作九宮格,在小學奧數里有一句非常有名的口訣 二四為肩,六八為足,左三右七,戴九履一,五居其中 通過這...