hiho一下 第135周 九宮 (列舉幻方)

2021-07-26 11:31:08 字數 1591 閱讀 6922

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

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

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

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

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

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

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

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

0 7 2

0 5 0

0 3 0

6 7 2

1 5 9

8 3 4

給出乙個不完整的三階幻方,問能否將它還原,如果可以還原成多種情況,輸出too many,否則輸出唯一還原後的幻方。

怎麼說呢!這道題,想了想這樣的三階幻方,中心的數字一定是5,並且四個角一定是偶數,不論怎麼旋轉變化,總共也不超過10種情況。

於是,很輕鬆的寫出了八種所有情況。

接下來便是把輸入的不完整幻方與所有的情況對比,若符合多個,便說明還原之後的幻方不唯一,否則輸出可以還原到的幻方。

#include 

#include

#include

#include

#include

using

namespace

std;

int a[8][3][3]= //三階幻方旋轉總共只有八種情況,可以很快寫出來的

, ,},,

,},,,

},,,},

,,},,

,},,,

},,,}

};bool judge(int a[3][3],int s[3][3])

int main()

if(count==1)

for(int i=0; i<3; i++)

for(int j=0; j<3; j++)

printf(j!=2?"%d ":"%d\n",a[sk][i][j]);

else

printf("too many\n");

return

0;}

hiho一下第143周

題目1 hiho密碼 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 小ho根據最近在密碼學課上學習到的知識,開發出了一款hiho密碼,這款密碼的秘鑰是這樣生成的 對於一種有n個字母的語言,選擇乙個長度為m的單詞 將組成這個單詞的所有字母按照順序不重複的寫出 即遇到相...

hiho一下 第197周 逆序單詞

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 在英文中有很多逆序的單詞,比如dog和god,evil和live等等。現在給出乙份包含n個單詞的單詞表,其中每個單詞只出現一次,請你找出其中有多少對逆序單詞。第1行 1個整數,n,表示單詞數量。2 n 50,000。第2.n ...

hiho一下 第二週

題目名稱 trie樹 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一本詞典,於是小hi就向小ho提出了那個經典的問題 小ho,你能不能對於每乙個我給出的字串,都在這個詞典裡面找到以這個字串開頭的所...