九宮格的解題過(guò)程_第1頁(yè)
九宮格的解題過(guò)程_第2頁(yè)
九宮格的解題過(guò)程_第3頁(yè)
九宮格的解題過(guò)程_第4頁(yè)
九宮格的解題過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、九宮格的解題過(guò)程第1步首先計(jì)算每行數(shù)字之和。19九個(gè)數(shù)字之和:12345678945九宮格共有三行,并且每行的數(shù)字之和相等,因此45/315,即每行數(shù)字之和為15。第2步計(jì)算中間格的數(shù)字??紤]第2行,第2列,和2條對(duì)角線的數(shù)字之和。它們的總和為 15/4  60。在它們的總和中,中間格子的數(shù)字出現(xiàn)了4次,其它位置格子的數(shù)字都出現(xiàn)了而且僅出現(xiàn)了1次。所以,它們的總和(4×中間格子的數(shù)字)(其它8個(gè)數(shù)字)             

2、   (3×中間格子的數(shù)字)(19九個(gè)數(shù)字之和)因此, 603×中間格子的數(shù)字45,中間格子的數(shù)字等于5第3步,奇數(shù)不能出現(xiàn)在4個(gè)角上的格子里。比如,如果數(shù)字9出現(xiàn)在角上的格子里,那么為了保證9所在行或所在列的數(shù)字和為15,必須需要4個(gè)數(shù)字,兩兩之和必須為6。1,2,3,4,6,7,8中,只有2和4組成和為6的數(shù)字對(duì),找到第2個(gè)和為6的數(shù)字對(duì)是不可能的。因此,數(shù)字9不能出現(xiàn)在4個(gè)角上的格子里。同樣道理,1,3,7也不能出現(xiàn)在4個(gè)角上的格子里。第4步,2,4,6,8必須填在4個(gè)角上的格子里,并且保證對(duì)角線數(shù)字和為15。第5步,將1,3,

3、7,9填入相應(yīng)的格子里就完成了九宮格填數(shù)字任務(wù),注意和為15的條件。 完成了填九宮格的任務(wù)后,我們進(jìn)一步考慮,如果上面九宮格內(nèi)所有數(shù)字都加數(shù)字1會(huì)發(fā)生什么呢?即可不可以用數(shù)字2,3,4,5,6,7,8,9,10填九宮格,得到每一行,每一列,每一對(duì)角線的三個(gè)數(shù)字之和都相等的新九宮格呢。 顯而易見(jiàn),上面九宮格每行每列每對(duì)角線數(shù)字之和為18,奇數(shù)3,5,7,9處在4個(gè)角上的格子里,中間數(shù)6處在中間的格子里。從19和210各九個(gè)數(shù)字所填充的九宮格可以得出下列規(guī)律:1)九個(gè)數(shù)字是由9個(gè)相連的整數(shù)構(gòu)成的。2)九個(gè)數(shù)字中正中間的數(shù)字填在九宮格的中間格子里。19中的5,2-10中的6等。3

4、)每行每列的數(shù)字和等于中間數(shù)字的三倍。比如155´3和18=6´3。4)第2,4,6,8位的數(shù)字填充到4個(gè)角上的格子里。如2,3,4,5,6,7,8,9,10中的3,5,7,9和1,2,3,4,5,6,7,8,9中的2,4,6,8。問(wèn)題1:已知9個(gè)相連的整數(shù)填充的九宮格其每行數(shù)字和為45,求這九個(gè)數(shù)字。中間格數(shù)字為45¸315,15為正中間的數(shù)字,因此九個(gè)數(shù)字為11,12,13,14,15,16,17,18,19。問(wèn)題2:已知9個(gè)相連的整數(shù)填充的九宮格其每行數(shù)字和為96,求九宮格4個(gè)角上格子里的數(shù)。96¸332,得到九個(gè)數(shù)字為28,29,30,31,32

5、,33,34,35,36。4個(gè)角上的數(shù)字為29,31,33,35,其中35和29為對(duì)角關(guān)系,31和33為對(duì)角關(guān)系。問(wèn)題3:成公差為d(d!=0)的等差數(shù)列是否也填九宮格?比如公差為3的等差數(shù)列,1,4,7,10,13,16,19,22,25,如何填九宮格呢?5,15,25,35,45,55,65,75,85又怎樣填?古人說(shuō),“學(xué)貴有疑。小疑則小進(jìn),大疑則大進(jìn)”。在學(xué)習(xí)中,我們要注意歸納和演繹能力的培養(yǎng),總結(jié)一些規(guī)律,不但增加了學(xué)習(xí)的有效性和趣味性,對(duì)理解和掌握有關(guān)問(wèn)題也很有益處。培育創(chuàng)新型人才既是學(xué)校和老師的責(zé)任,也是我們學(xué)生要刻意磨練的目標(biāo)。本文通過(guò)詳解九宮格問(wèn)題,得到了一些有意義的結(jié)論和規(guī)

6、律,而這些規(guī)律的獲得使我們對(duì)九宮格問(wèn)題也有了更加深入的認(rèn)識(shí)?;梅降那蠼馊A幻方的解法第一種:楊輝法:九子斜排,上下對(duì)易,左右相更,四維挺出。12   43   5  7    6  8      9 2 9 47 5 36 1 8第二種:九宮圖也是幻方的別稱(chēng),三階幻方就是著名的洛書(shū),他的排列是:“戴九履一,左三右七,二四為肩,六八為足,五居中央(9在上中,1在下中。3在左中,7在右中,2

7、在左上,4在右上,6在左下,8在右下)第三種:羅伯法:最小的數(shù)據(jù)上行中央,依次向右上方斜填,上出框往下寫(xiě),右出框往左填,排重便在下格填,右上排重一個(gè)樣8 1 6 3 5 7 4 9 2四階幻方的解法1、先把這16個(gè)數(shù)字按順序從小到到排成一個(gè)4乘4的方陣2、內(nèi)外四個(gè)角對(duì)角上互補(bǔ)的數(shù)相易,(方陣分為兩個(gè)正方形,外大內(nèi)小,然后把大正方形的四個(gè)對(duì)角上的數(shù)字對(duì)換,小正方形四個(gè)對(duì)角上的數(shù)字對(duì)換)即(1,16)(4,13)互換(6,11)(7,10)互換16 2 3 135 11 10 89 7 6 124 14 15 1另:對(duì)于n=4k階幻方,我們先把數(shù)字按順序填寫(xiě)。寫(xiě)好后,按4*4把

8、它劃分成k*k個(gè)方陣。因?yàn)閚是4的倍數(shù),一定能用4*4的小方陣分割。然后把每個(gè)小方陣的對(duì)角線,象制作4階幻方的方法一樣,對(duì)角線上的數(shù)字換成互補(bǔ)的數(shù)字,就構(gòu)成幻方。五階幻方的解法:羅伯法:最小的數(shù)據(jù)上行中央,依次向右上方斜填,上出框往下寫(xiě),右出框往左填,排重便在下格填,右上排重一個(gè)樣。17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 (在最上一行的中間填1,接著在1的右上方填2,由于1在最上一行, 所以1的右上方應(yīng)該是第五行的第四個(gè), 接下來(lái)在2

9、的右上方填3,3的右上方應(yīng)該是第三行第一個(gè),所以在此填4,在4的右上方填5, 在5的下方填6,接著按前面五個(gè)數(shù)的填法依次填7,8,9,10; 在10的下方填11,然后按上面的方法填, 每次填五個(gè)數(shù),直到完成. 無(wú)論從上到下還是從左到右都是五排, 所以每排的五個(gè)數(shù)之和為(1+2+3+4+25)÷5=65, 因此,你可以驗(yàn)算一下是否每個(gè)和都是65. 此法適合于一切奇階幻方.)數(shù)獨(dú)游戲數(shù)獨(dú),據(jù)說(shuō)最先是在瑞典,后來(lái)到美國(guó),然后到日本被發(fā)揚(yáng)光大。這個(gè)游戲,進(jìn)入了今年上海交大的自主招生試題最后一道大題就是數(shù)獨(dú)題。上面的圖片中,

10、紅色是在玩游戲前給出的數(shù)字,藍(lán)色的數(shù)字就是后填的。游戲的規(guī)則很簡(jiǎn)單,每一行填入19九個(gè)數(shù)字,每一列也填入19九個(gè)數(shù)字,但同時(shí)要滿足每一個(gè)九宮格中也包含19九個(gè)數(shù)字,也就是說(shuō)每一個(gè)九宮格中也填入19九個(gè)數(shù)字。此圖的特別之處就是橫行縱列加上兩條對(duì)角線上的三個(gè)數(shù)字之和均為15。類(lèi)似于這樣的問(wèn)題,也稱(chēng)之為幻方,像上面的九宮格,可稱(chēng)為3階幻方(因每行,每列,兩條對(duì)角線上數(shù)字個(gè)數(shù)是3),還有4階、5階、6階等。此外還可分為奇階幻方和偶階幻方。九宮格就屬于奇階幻方。下面是個(gè)五階幻方?;梅降奶顚?xiě)是有規(guī)律的,我想通過(guò)上面兩個(gè)兩個(gè)幻方可以找到一些規(guī)律。偶階幻方的填寫(xiě)規(guī)律比奇階幻方要稍微復(fù)雜小聲點(diǎn)說(shuō),我還不是太明白

11、,還在繼續(xù)學(xué)習(xí)中。練習(xí)1:.完成一道數(shù)獨(dú)游戲題吧,說(shuō)不定下回哪個(gè)考試也會(huì)有這樣的題呢!練習(xí)2:3階幻方三個(gè)數(shù)的和是15,5階幻方五個(gè)數(shù)的和是65,你能說(shuō)出7階幻方中七個(gè)數(shù)的和是多少嗎?進(jìn)一步,你能說(shuō)出奇階幻方中n個(gè)數(shù)字的和是多少嗎?練習(xí)3: 完成一個(gè)7階幻方。比如說(shuō)三階幻方,先向外翻折擴(kuò)展,然后按上圖左二的規(guī)律,按順序?qū)懮?-9的數(shù)字,接下來(lái)幻方之外的數(shù),按左往右仍,右往左仍,上往下扔,下往上扔的規(guī)律填進(jìn)幻方,將其余的刪去,就得到一個(gè)橫豎斜都等于15的幻方了!下圖是五階幻方的解法,方法相同,只是規(guī)模大了點(diǎn)。七階幻方如下:(唉,上面那種做圖太累,后面的圖就來(lái)自于互聯(lián)網(wǎng)了。)只要按照這個(gè)方法,無(wú)論

12、多少階,只要是個(gè)奇數(shù),都可以畫(huà)得出來(lái),至少一個(gè)!你可以奸詐一點(diǎn),比如說(shuō)畫(huà)好菱形后,1的起始位置是可以換的,寫(xiě)的方向也是可以換的,但是最后出來(lái)的幻方本質(zhì)上是一樣的。對(duì)于偶數(shù)呢,最小是4階的,四階的幻方老師也講了一個(gè)解法,就是大對(duì)角線換,小對(duì)角線也換。步驟如下:先按順序?qū)懗?-16的數(shù)在4階幻方里面,如下:接下來(lái)所謂的大對(duì)角線換,小對(duì)角線換就是1和16換,4和13換,6和11,7和10,換完就出來(lái)了:橫豎斜都是34。然后問(wèn)題就來(lái)了,有沒(méi)有辦法可以解出任意高偶數(shù)階的幻方的方法呢?我曾經(jīng)很傻很天真的試圖把4階這種換對(duì)角線的方法推廣到6階,但是怎么弄都未果,估計(jì)這種方法對(duì)于4階只是種巧合吧。后來(lái)大學(xué)玩m

13、atlab后,發(fā)現(xiàn)matlab里面函數(shù)magic可以輸出任意階的幻方,哦,soga,原來(lái)真的有的啊。后來(lái)我就對(duì)著matlab里面magic的源文件寫(xiě)出了這個(gè)C+版本,只是為了鞏固自己對(duì)四階的理解罷了。然后下面整理一下一般的偶數(shù)階幻方的解法,解法來(lái)源于互聯(lián)網(wǎng)。首先一般的偶數(shù)階解法都是把偶數(shù)分成兩種,4,8,12,16這種4m的雙偶數(shù)和6,10,14這種4m+2的單偶數(shù),一般的解法都是分開(kāi)來(lái)兩類(lèi)的,包括matlab里面的magic函數(shù),不過(guò)查了一下也有很多大牛研究出了統(tǒng)一解法,更有大神把奇偶階全部同意了,膜拜ing。雙偶數(shù)解法:偶數(shù)階下面先講簡(jiǎn)單的雙偶數(shù)解法,看了很多解法,但是最后發(fā)現(xiàn)了一個(gè)通解,

14、網(wǎng)上看到的大部分解法都是這個(gè)通解的特例。首先呢,如下圖所示,先把n階幻方分成4個(gè)小塊,對(duì)于左上角那個(gè)你任意的把一半放個(gè)填成灰色,但是有一個(gè)約束條件,就是左上角這個(gè)小塊中每一行每一列都要只有n/4個(gè)灰色的。然后呢,右上的那個(gè)小塊的填色方案就是左上填色方案的左右鏡像對(duì)稱(chēng),左下的就是左上天色方案的上下鏡像對(duì)稱(chēng),自然,右下就是左上的中心對(duì)稱(chēng)了。如下圖所示:然后呢,你把1-n²這么多個(gè)數(shù)按順序填進(jìn)白色的格子里去,灰色的部分要留著。如下面左圖所示:之后呢,把剩下的沒(méi)填的數(shù)反過(guò)來(lái)填進(jìn)去,也就是從右下到左上的順序,填完雙偶數(shù)階幻方就出來(lái)了。 現(xiàn)在我們來(lái)討論一下這種方法,首先看我們?cè)镜乃碾A

15、幻方的解法,有沒(méi)有發(fā)現(xiàn)其實(shí)和這種方法是一個(gè)東西。然后再看看雙偶數(shù)階的另一種解法,比如說(shuō)下面這個(gè)8階幻方:這里的解法呢,就是把整個(gè)幻方分成2×2個(gè)4×4的小塊,按順序填好1-64個(gè)數(shù),然后每個(gè)4×4小塊的對(duì)角線上的數(shù)不變,其余的數(shù)做中心對(duì)稱(chēng)。再看看下面這個(gè):12階,分成3×3個(gè)4×4的小塊,和之前一樣,按順序填好數(shù),然后每個(gè)4×4小塊的對(duì)角線上的數(shù)不變,其余的數(shù)做中心對(duì)稱(chēng)。雖然和我最開(kāi)始的那種分法不一樣,但是你仔細(xì)一想,其實(shí)是完全一樣的,只是他的填色方案是固定的一種模式而已。還有一種說(shuō)法是每個(gè)小塊對(duì)角線上的數(shù)換成互補(bǔ)的那個(gè)數(shù),其實(shí)本質(zhì)還

16、是一樣嘛。下面是一個(gè)雙偶數(shù)的matlab程序,我填色方案用時(shí)是國(guó)際象棋棋盤(pán)那種黑白相間。function a = hf_4m(n)flag = zeros(n/2,n/2);flag(1:2:n/2,1:2:n/2) = 1;flag(2:2:n/2,2:2:n/2) = 1;flag = flag fliplr(flag);flipud(flag) flipud(fliplr(flag);a = reshape(1:n2,n,n)'a = a .* flag;a = reshape(a',1,n2);blank_idx = find(a=0);number_left = (1

17、:n2) .* (a=0);number_left = fliplr(setdiff(number_left,0);a(blank_idx) = number_left;a = reshape(a,n,n)'單偶數(shù)解法:下面來(lái)看看單偶數(shù)的解法,這種現(xiàn)在主要有兩種方法,分區(qū)法和易位法。其中呢,分區(qū)法也有兩種。先說(shuō)分區(qū)法,首先呢就是把方陣劃分成下面A,B,C,D四塊,因?yàn)槭菃闻紨?shù),所以每一塊必然是個(gè)奇數(shù)幻方。然后把1n²/4這些數(shù)組成的奇數(shù)階幻方算出來(lái),填進(jìn)A里面,然后接下來(lái)的n²/4的幻方填進(jìn)D里面,(其實(shí)有個(gè)很簡(jiǎn)單的方法,就是把A里面的每個(gè)數(shù)加上n²/4就

18、可以了),再把D里面的加上n²/4放到B里面,最后那些放到C里面。下面是10階幻方的一個(gè)例子:然后下面的東西有點(diǎn)拗口,但是細(xì)細(xì)讀就會(huì)明白了:先假設(shè)階數(shù)是4k+2,那么k=(n-2)/4,然后下面是第一種方法:從A小塊的中間行中間格開(kāi)始(上圖中的13),向右找k個(gè)數(shù)(包括中間行中間格那個(gè)),和C小塊的相應(yīng)位置的數(shù)換位。A小塊的其他行(也就是除了最中間那一行)從最左開(kāi)始數(shù)出k個(gè)數(shù),和C中相應(yīng)位置的數(shù)換。B小塊中間列開(kāi)始,向左數(shù)K-1列出來(lái)(當(dāng)然也包括B小塊中間那一列),然后這些列和D小塊中相應(yīng)未知的數(shù)換位。(6階k-1=0,就不用了)然后就完成了。14階幻方的換位方式如下: 這

19、種方法的matlab函數(shù)如下:function a = hf_4m_2(n)a = zeros(n,n);a(1:n/2,1:n/2) = magic(n/2);a(n/2+1:n,n/2+1:n) = a(1:n/2,1:n/2) + n2/4;a(1:n/2,n/2+1:n) = a(1:n/2,1:n/2) + n2/4*2;a(n/2+1:n,1:n/2) = a(1:n/2,1:n/2) + n2/4*3;m = (n/2-1)/2;temp = a(n/2+1)/2,(n/2+1)/2:(n/2+1)/2+m-1);a(n/2+1)/2,(n/2+1)/2:(n/2+1)/2+m-

20、1) = a(n/2+1)/2+n/2,(n/2+1)/2:(n/2+1)/2+m-1);a(n/2+1)/2+n/2,(n/2+1)/2:(n/2+1)/2+m-1) = temp;temp = a(setdiff(1:n/2,(n/2+1)/2),1:1+m-1);a(setdiff(1:n/2,(n/2+1)/2),1:1+m-1) = a(setdiff(1:n/2,(n/2+1)/2)+n/2,1:1+m-1);a(setdiff(1:n/2,(n/2+1)/2)+n/2,1:1+m-1) = temp;if(m>1)temp = a(1:n/2,n*3/4+1/2-m+2:n

21、*3/4+1/2);a(1:n/2,n*3/4+1/2-m+2:n*3/4+1/2) = a(1+n/2:n,n*3/4+1/2-m+2:n*3/4+1/2);a(1+n/2:n,n*3/4+1/2-m+2:n*3/4+1/2) = temp;end然后還有一種換位方法,A小塊中間那一行第2列開(kāi)始往右數(shù)k個(gè)數(shù),和C小塊中相應(yīng)位置的數(shù)換位,A小塊中其余行都從最左開(kāi)始向右數(shù)k列,這些數(shù)也和C小塊的做交換。B小塊中,從最右開(kāi)始向左數(shù)k-1個(gè)列,與D中相應(yīng)位置的數(shù)換位,結(jié)果也是一樣的。這種方法matlab代碼如下:function a = hf_4m_2(n)a = zeros(n,n);a(1:n/

22、2,1:n/2) = magic(n/2);a(n/2+1:n,n/2+1:n) = a(1:n/2,1:n/2) + n2/4;a(1:n/2,n/2+1:n) = a(1:n/2,1:n/2) + n2/4*2;a(n/2+1:n,1:n/2) = a(1:n/2,1:n/2) + n2/4*3;m = (n/2-1)/2;temp = a(n/2+1)/2,2:2+m-1);a(n/2+1)/2,2:2+m-1) = a(n/2+1)/2+n/2,2:2+m-1);a(n/2+1)/2+n/2,2:2+m-1) = temp;temp = a(setdiff(1:n/2,(n/2+1)/

23、2),1:1+m-1);a(setdiff(1:n/2,(n/2+1)/2),1:1+m-1) = a(setdiff(1:n/2,(n/2+1)/2)+n/2,1:1+m-1);a(setdiff(1:n/2,(n/2+1)/2)+n/2,1:1+m-1) = temp;if(m>1)temp = a(1:n/2,n:-1:n-m+2); a(1:n/2,n:-1:n-m+2) = a(1:n/2)+n/2,n:-1:n-m+2);a(1:n/2)+n/2,n:-1:n-m+2) = temp;end這兩中方法為什么可行我還沒(méi)仔細(xì)研究,但是剛剛編程發(fā)現(xiàn)一個(gè)很神奇的現(xiàn)象,就是第一種方法的

24、BD小塊交換規(guī)則配上第二種方法的AC小塊交換規(guī)則,也是可以的。囧。對(duì)于單偶數(shù)的幻方,還有一種楊輝創(chuàng)造的二階方陣易位法(我發(fā)現(xiàn)楊輝老兄很喜歡玩數(shù)陣)。對(duì)于n = 4m+2階幻方,先用奇數(shù)階的方法做出一個(gè)2m+1階幻方來(lái),然后把1n²那么多個(gè)數(shù)4個(gè)一組,分成(2m+1)²個(gè)組,1,2,3,45,6,7,89,10,11,12分別稱(chēng)為第1組,第2組,第3組第(2m+1)²組。接下來(lái)那每一組四個(gè)數(shù)按下面的方法放入2×2的方陣中:然后把之前那個(gè)2m+1階幻方,每個(gè)位置上的數(shù)如果是i,那么就換成第i組2×2方陣,這樣就有了一個(gè)n×n的方陣了,但是

25、這個(gè)方陣還不是幻方,需要再修正。我們繼續(xù)討論剛才那一個(gè)2m+1階幻方,假設(shè)我們n=14,那么2m+1 = 7,對(duì)于下圖中這個(gè)7階的方陣,我們把倒數(shù)第二行染綠,然后從中間那一行開(kāi)始向下知道倒數(shù)第三行為止全部染藍(lán),如果中間那一行就是倒數(shù)第二行,那么不染藍(lán)。接下來(lái)在把最左和最右兩列的染色向下拉一格。如下圖:我們知道對(duì)應(yīng)于剛剛做出來(lái)的那個(gè)n×n的方陣,每2×2方陣,四個(gè)數(shù)對(duì)應(yīng)于上圖的一個(gè)格。我們現(xiàn)在做如下操作,如果是綠色的格子,那么2×2方陣的最下面兩個(gè)數(shù)交換,如果是藍(lán)色格子的話,2×2方陣不僅下面兩個(gè)數(shù)交換,而且上面兩個(gè)數(shù)也要交換。下面舉個(gè)例子:對(duì)于14階幻方

26、,先生成一個(gè)7階幻方然后把相應(yīng)位置填上相應(yīng)的2階方陣:填好色:綠色格子下面兩個(gè)數(shù)換位,藍(lán)色的上下都換,就得到結(jié)果啦楊輝易位法代碼如下:function a = hf_4m_2_yiwei(n)h = magic(n/2);a = zeros(n,n);for i = 1 : n/2for j = 1 : n/2a(i*2-1:i*2,j*2-1:j*2) = 2 3;4 1 + (h(i,j)-1)*4;endendflag = zeros(n/2,n/2);flag(n/2-1,:) = 1; %下面兩個(gè)互換if(n > 6) flag(n/2+1)/2:n/2-2,:) = 2;%上

27、面下面都要換endflag(2:n/2,1 n/2) = flag(1:n/2-1,1 n/2);for i = 1 : n/2for j = 1 : n/2if(flag(i,j) >0)temp = a(i*2,j*2-1);a(i*2,j*2-1) = a(i*2,j*2);a(i*2,j*2) = temp;endif(flag(i,j) = 2)temp = a(i*2-1,j*2-1);a(i*2-1,j*2-1) = a(i*2-1,j*2);a(i*2-1,j*2) = temp;endendend喲西,好了,終于寫(xiě)的差不多了。自個(gè)研究了一下,收獲頗多。不過(guò)幻方可不僅僅是

28、構(gòu)造那么簡(jiǎn)單,以前看的一本書(shū)里面有各種變態(tài)的幻方,什么切尾幻方什么的。還有很多數(shù)學(xué)上的東西,下面提問(wèn),請(qǐng)證明:偶數(shù)階幻方行列式值一定是0!下面附上一個(gè)很多年前改寫(xiě)matlab的magic函數(shù)的C+代碼:#include<iostream.h>#include<iomanip.h>classmagicpublic:    int *m;    magic();    magic(int n);    magic(magic &c);    void show();

29、   int size;magic:magic(magic &c)    int n=c.size;    size=n;    m=newint*n;    for(int l=0;l<n;l+)            ml=newintn;        for(int k=0;k<n;k+)            

30、;        mlk=c.mlk;            magic:magic(int n)    size=n;    m=newint*n;    for(int l=0;l<n;l+)            ml=newintn;        for(int k=0;k<n;k+)     &

31、#160;      mlk=0;    void magic:show()    for(int l=0;l<size;l+)            for(int k=0;k<size;k+)            cout<<setw(3)<<mlk<<" "        cout<&l

32、t;endl;        cout<<endl;magiccreatmagic(int n)    intl,k;    if(n%2=1)            magic i(n),j(n),m(n),a(n),b(n);        for(l=0;l<n;l+)            for(k=0;k<n;k+) &#

33、160;                          j.mlk=k+1;                i.mlk=l+1;                        for(l=0;l<n;l+)        

34、;        for(k=0;k<n;k+)                                    a.mlk=(i.mlk+j.mlk-(n+3)/2)%n;                    if(a.mlk<0) a.mlk+=n; &#

35、160;                  b.mlk=(i.mlk+j.mlk*2-2)%n;                    if(b.mlk<0) b.mlk+=n;                    m.mlk=n*a.mlk+b.mlk+1;      

36、                          return m;        elseif(n%4=0)            magic i(n),j(n),d(n),m(n);        for(l=0;l<n;l+)            for

37、(k=0;k<n;k+)                            j.mlk=k+1;                i.mlk=l+1;                d.mlk=(   (i.mlk%4)/2)  =  (j.mlk%4)/2)

38、 );                m.mlk=l*n+k+1;                if(d.mlk=1) m.mlk=n*n+1-m.mlk;                        return m;        else   

39、60;        int p=n/2;        magic t(creatmagic(p),m(n);        for(l=0;l<n;l+)            for(k=0;k<n;k+)            if(l<n/2&&k<n/2)       

40、0;    m.mlk=t.mlk;            elseif(l<n/2&&k>=n/2)                m.mlk=t.mlk-n/2+2*p*p;            elseif(l>=n/2&&k<n/2)           

41、0;    m.mlk=t.ml-n/2k+3*p*p;            else                m.mlk=t.ml-n/2k-n/2+p*p;                        int e=(n-2)/4;           &#

42、160;/cout<<e;            for(l=0;l<n;l+)                            if( ( l>=0 && l<=(e-1) )  |  (  l>=(n+1-e)  )            

43、;                        for(k=0;k<n/2;k+)                                            int temp=m.mkl;       

44、0;                m.mkl=m.mk+n/2l;                        m.mk+n/2l=temp;                                    

45、                       int temp=m.me0;            m.me0=m.me+n/20;            m.me+n/20=temp;            temp=m.mee;          

46、;  m.mee=m.me+n/2e;            m.me+n/2e=temp;            return m;    void main()    float m;    int n;    while(1)            cout<<"input the size:&quo

47、t;        cin>>m;        n=int(m);        if(n=2|n<=0)            continue;        magic result(creatmagic(n);        result.show();        c

48、out<<"每一列和為:n"        for(int l=0;l<n;l+)                    cout<<l+1<<":"            int sum=0;            for(int k=0;k<n;k

49、+)                            sum+=result.mlk;                cout<<result.mlk;                if(k!=n-1)           

50、60;        cout<<"+"                        cout<<"="<<sum<<endl;                cout<<"每一行和為:n"        for( l=0;l<n;l+)                    int  sum=0;            cout<<l+1<<":"         

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論