藍橋杯 歷屆試題 九宮幻方(C )

2021-10-06 09:48:44 字數 1635 閱讀 6399

問題描述

解題思路

具體**

資源限制

時間限制:1.0s

記憶體限制:256.0mb

問題描述

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

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

4 9 2   

3 5 7   

8 1 6

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

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

輸入格式   

輸入僅包含單組測試資料。每組測試資料為乙個33的矩陣,其中為0的部分表示被小明抹去的部分。

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

輸出格式

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

樣例輸入

0 7 2

0 5 0

0 3 0

樣例輸出

6 7 2

1 5 9

8 3 4

通過旋轉和映象操作,可得三階幻方的基礎情況一共有8種,將三階幻的所有可能都列出來,然後輸入的資料與基礎情況進行匹配,並對相匹配次數cnt進行累加,如果cnt為1,則輸出還原的三階幻方,若果cnt大於1或為0,則輸出「too many」。思路參考了鄭未老師的講解,具體可以在b站搜尋歷屆真題講解。

#include

#include

using

namespace std;

//用二維陣列儲存所有可能的情況

int all[8]

[9]=

,,//上下

,//左右

,//右旋

,//右旋:左右

,//右旋:上下

,//再右旋

//再右旋 };

inttest

(int data[9]

)//跟基礎情況進行匹配}if

(ok)

//匹配}if

(cnt==1)

//只有一種情況匹配

return ans;

else

//有多種情況匹配或沒有匹配

藍橋 歷屆試題 九宮幻方

歷屆試題 九宮幻方 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。三階幻方又被稱作九宮格,在小學奧數里有一句非常...

歷屆試題 九宮幻方

歷屆試題 九宮幻方 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明最近在教鄰居家的小朋友小學奧數,而最近正好講述到了三階幻方這個部分,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。三階幻方又被稱作九宮格,在小學奧數里有一句非常...

歷屆試題 九宮幻方

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