版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C 語(yǔ)言程序設(shè)計(jì)100 例之( 27):回旋方陣?yán)?27回旋方陣問(wèn)題描述編寫(xiě)程序,生成從內(nèi)到外是連續(xù)的自然數(shù)排列的回旋方陣。例如,當(dāng) n=3 和 n=4 時(shí)的回旋方陣如下圖 1 所示。N=3N = 476576516814814159239231410111213圖 1由內(nèi)到外回旋方陣輸入格式一個(gè)正整數(shù)n (1 n 20)。輸出格式N 階滿足要求的由內(nèi)到外回旋方陣。輸出時(shí)共n 行,每行n 個(gè)數(shù),每個(gè)數(shù)占4 列。輸入樣例5輸出樣例21201918172276516238141524923142510111213(1)編程思路 1。觀察圖1 及樣例,由內(nèi)到外回旋方陣的構(gòu)造方法是:先將1 填入方陣的
2、中心位置(即i=(n-1)/2;j=(n-1)/2;aij=1 ),然后其余數(shù)的填寫(xiě)可以看成由向下填充(列號(hào)不變、行號(hào)加 1,即 i+)、向右填充(行號(hào)不變、列號(hào)加1,即 j+)、向上填充(行號(hào)減1、列號(hào)不變,即 i- )和向左填充(行號(hào)不變、列號(hào)減1,即 j- )四個(gè)子過(guò)程不斷交替完成的。例如,圖 1 所示的 4 階由內(nèi)到外回旋方陣可以看成由向下填充(2 )、向右填充( 3)、向上填充( 4、 5)、向左填充( 6、 7)、向下填充( 8、 9、 10)、向右填充(11、 12、 13)、向上填充( 14、15、 16)這 7 個(gè)子過(guò)程完成的。n 階由內(nèi)到外回旋方陣可以看成由4 個(gè)子過(guò)程交替
3、進(jìn)行來(lái)完成的,這 4 個(gè)子過(guò)d123或 4,1 表示向下填充, 2 表示向右填充, 3 表示向上填充, 4 表示向左填充。每個(gè)子過(guò)程結(jié)束后,切換填充方向,方式為: d+,若 d4, d=1。在這一序列子過(guò)程中,第1、 2 子過(guò)程填寫(xiě) 1 個(gè)數(shù),第 3、 4 子過(guò)程填寫(xiě) 2 個(gè)數(shù),第5、6 子過(guò)程填寫(xiě) 3 個(gè)數(shù),第 7、 8 子過(guò)程填寫(xiě) 4 個(gè)數(shù), ,直到最后一個(gè)數(shù)n2填寫(xiě)完畢。(2)源程序 1。#includeint main()int a2020=0,i,j,k=1,n,x,d,cnt;scanf(%d,&n);i=(n-1)/2;j=(n-1)/2;aij=k+;d=1;cnt=1
4、;x=0;while (k=n*n)switch (d)case 1:i+;aij=k+;x+;if (x=cnt)d=2,x=0;break;case 2:j+;aij=k+;x+;if (x=cnt)d=3,x=0,cnt+;break;case 3:i-;aij=k+;x+;if (x=cnt)d=4,x=0;break;case 4:j-;aij=k+;x+;if (x=cnt)d=1,x=0,cnt+;break;for (i=0;in;i+)for (j=0;j=x1)/向上填充arowcol=num;row- ;/行號(hào)減1、列號(hào)不變,向上填充num- ;一次向上填充結(jié)束后,x1
5、加 1(即 x1+),這樣向上填充的上邊界增大了,下次就會(huì)少填一行。同時(shí)修改row 和 col,即 row- 、 col-,從而得到向左填充的起點(diǎn)。由于奇數(shù)階方陣先向上填充,這樣當(dāng)向左填充時(shí), 最底行的左下角已經(jīng)填有數(shù)字,因此,向左填充的邊界的初始值應(yīng)為1(即 y1=1)。同理,偶數(shù)階方陣的初始向右填充的邊界y2=n-1。(4)源程序 2。#includeint main()int row,col,a2020=0,n,num;int x1,x2,y1,y2,s;/x1:填充上邊界x2 :填充下邊界/y1:填充左邊界y2 :填充右邊界s:數(shù)組元素升降標(biāo)記,s 等于 l 為升, s 等于 -1 為
6、降scanf(%d,&n);num=n*n;x1=0;y1=0; x2=n; y2=n;if (n%2=0) row=0;col=n-1;y2=n-1; s=1;else row=n-1; col=0;y1=1; s=-1;while (num=1)if(s=1)while (row=y1)/ 向左填充 arowcol=num-;col-; col+;row-;/ 得到向上填充的起點(diǎn)y1+;/ 向左填充的左邊界增大s=-1;/ 切換升降標(biāo)志elsewhile(row=x1)/向上填充 arowcol=num-;row-; row+;col+;/得到向右填充的起點(diǎn)x1+;/向上填充的上邊
7、界增大while (coly2)/向右填充arowcol=num-;col+;col-;row+;/ 得到向下填充的起點(diǎn)y2-;/向右填充的右邊界縮小s=1;/切換升降標(biāo)志for (int i=0;in;i+)for (int j=0;jn;j+)printf(%4d,aij);printf(n);return 0;習(xí)題 2727-1由外向內(nèi)回旋方陣問(wèn)題描述編寫(xiě)程序,生成從外到內(nèi)是連續(xù)的自然數(shù)排列的回旋方陣。例如,當(dāng)n=3 和 n=4 時(shí)的回旋方陣如下圖2 所示。N=31871296234534圖 2由外向內(nèi)回旋方陣輸入格式一個(gè)正整數(shù)n (1 n 20)。輸出格式N 階滿足要求的由外向內(nèi)回旋方
8、陣。輸出時(shí)共n 行,每行n 個(gè)數(shù),每個(gè)數(shù)占4 列。輸入樣例5輸出樣例11615141321724231231825221141920211056789( 1)編程思路。由外向內(nèi)回旋方陣可以通過(guò)對(duì)方陣的每一圈的各邊的各個(gè)元素順序賦值來(lái)完成。每一圈的賦值又依次包含4 個(gè)順序的過(guò)程。1)一圈的左列從上至下遞增賦值,一直賦值到超過(guò)最底行(即row=n )或下一位置已經(jīng)賦值了(即arow+1col ! =0)。while(row+1n & !arow+1col)a+rowcol=+num;/列號(hào) col 不變,行號(hào)2)一圈的下行從左至右遞增賦值,一直賦值到超過(guò)最右列(即經(jīng)賦值了(即arowcol
9、+1 ! =0)。row遞增,數(shù) num 遞增col=n)或下一位置已while(col+1=0&!arow-1col)a-rowcol=+num;/行號(hào) row 遞減,列號(hào)4)一圈的上行從右至左遞增賦值,一直賦值到超過(guò)最左列(即經(jīng)賦值了(即arowcol-1 ! =0)。col不變,數(shù) num 遞增col=-1)或下一位置已while(col-1=0&!arowcol-1)arow-col=+num;/行號(hào) row不變,列號(hào)col遞減,數(shù)num遞增初始時(shí), row=0 、 col=0、 num=1。( 2)源程序。#includeint main()int a2020=0;i
10、nt n,row,col,num=0;scanf(%d,&n);num=arow=0col=0=1;while(numn*n)/第 0 行第 0 列輸入起始/數(shù)組中的數(shù)不超過(guò)n*n1while(row+1n & !arow+1col)/向下填充a+rowcol=+num;while(col+1=0&!arow-1col)/向上填充a-rowcol=+num;while(col-1=0&!arowcol-1)/向左填充arow-col=+num;for (int i=0;in;i+)for (int j=0;jn;j+)printf(%4d,aij);printf
11、(n);return 0;27-2間斷折疊方陣問(wèn)題描述n 階間斷折疊方陣是把從起始數(shù)1 開(kāi)始的 n2個(gè)整數(shù)折疊為n 行 n 列的 n 階方陣:起始數(shù)1置于方陣的左上角,然后從起始數(shù)開(kāi)始遞增,每一層從第1 行開(kāi)始,先豎向下再折轉(zhuǎn)向左,層層折疊地排列為間斷折疊方陣。例如,當(dāng) n=4 和 n=5 時(shí)的間斷折疊方陣如下圖3 所示。圖 3間斷折疊方陣輸入格式一個(gè)正整數(shù)n (1 n 20)。輸出格式N 階滿足要求的間斷折疊方陣。輸出時(shí)共n 行,每行n 個(gè)數(shù),每個(gè)數(shù)占4 列。輸入樣例5輸出樣例12510 1743611 1898712 1916151413 2025242322 21( 1)編程思路。定義一
12、個(gè)二維數(shù)組a 保存方陣的各元素,從給定的起始數(shù)1 開(kāi)始,按遞增 1 取值,根據(jù)間斷折疊方陣的構(gòu)造特點(diǎn)給二維數(shù)組ann 賦值。起始數(shù) 1 賦值給 a00 。除 a00 外, n 階方陣還有疊折的n-1 層:第 i 層( i=1、2、 、 n-1)的起始位置為( 0,i),隨后列號(hào) col 不變行號(hào) row 遞增(即向下填寫(xiě)),至 row=i 時(shí)折轉(zhuǎn);轉(zhuǎn)折后,行號(hào) row 不變列號(hào) col 遞減(即向左填寫(xiě)) ,至 col=0時(shí)該層結(jié)束,在每一位置分別按遞增值賦值給arowcol 。具體過(guò)程描述為:a00=1;num=2;for(i=1;im;i+)/方陣共m 層row=0;col=i;/確定每層
13、起始位置arowcol= num+;while(row0)a+rowcol=num+;arow-col=num+;/先向下填/再向左填( 2)源程序。#includeint main()int i,m,num,row,col,a2020;scanf(%d,&m);a00=1;num=2;for (i=1;im;i+)/方陣共m 層row=0;col=i;arowcol=num+;while(row0)arow-col=num+;for (i=0;im;i+)for (int j=0;jm;j+)printf(%4d,aij);printf(n);return 0;27-3 回轉(zhuǎn)折疊方陣
14、問(wèn)題描述n 階回轉(zhuǎn)折疊方陣是把起始數(shù)1 置于方陣的左上角,然后從起始數(shù)開(kāi)始遞增,偶數(shù)層從第1行開(kāi)始,先豎向下再折轉(zhuǎn)向左;奇數(shù)層從第1 列開(kāi)始,先橫向右再豎向上,呈首尾連接,層層折疊地排列為回轉(zhuǎn)折疊方陣。例如,當(dāng)n=4 和 n=5 時(shí)的回轉(zhuǎn)折疊方陣如下圖4 所示。圖 4回轉(zhuǎn)折疊方陣輸入格式一個(gè)正整數(shù)n (1 n 20)。輸出格式N 階滿足要求的回轉(zhuǎn)折疊方陣。輸出時(shí)共n 行,每行n 個(gè)數(shù),每個(gè)數(shù)占4 列。輸入樣例5輸出樣例129 10 25438 11 24567 12 23161514 13 22171819 20 21( 1)編程思路?;剞D(zhuǎn)折疊方陣構(gòu)造過(guò)程的奇數(shù)層(注意: 由于數(shù)組下標(biāo)從0 開(kāi)始,因此程序中層號(hào)也從0 開(kāi)始)與間斷折疊構(gòu)造過(guò)程相同,偶數(shù)層構(gòu)造方法改變?yōu)椋涸搶拥钠鹗嘉恢脼椋ê笮刑?hào) row 不變列號(hào)col 遞增(即向右填寫(xiě)) ,至 col=i 時(shí)折轉(zhuǎn);轉(zhuǎn)折后,列號(hào)row 遞減(即向上填寫(xiě)) ,至 row=0 時(shí)該層結(jié)束,在每一位置分別按遞增值賦值給i,0),隨col 不變行號(hào)arowcol 。if (i%2=0)row=i;col=0;/確定偶數(shù)層的起始位置arowcol=num+;while(col0) a-rowcol=num+;/先向右填/再向上填( 2)源程序。#includeint main()int i,m,num,row,col,a202
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版兒童托管所合伙人經(jīng)營(yíng)管理協(xié)議示范文本3篇
- 二零二五版新能源汽車(chē)電池回收利用服務(wù)協(xié)議4篇
- 二零二五年度打樁工程信息化管理合同規(guī)范范本3篇
- 2025年鮮蛋電商運(yùn)營(yíng)與數(shù)據(jù)分析合作協(xié)議3篇
- 二零二五年礦山承包經(jīng)營(yíng)資源節(jié)約利用協(xié)議3篇
- 2025年度煤礦企業(yè)員工勞動(dòng)合同范本(含加班補(bǔ)貼計(jì)算標(biāo)準(zhǔn))4篇
- 基于二零二五年度技術(shù)的香港電子合同制造成本降低協(xié)議3篇
- 個(gè)人電商運(yùn)營(yíng)服務(wù)合同2024年度3篇
- erp合同管理系統(tǒng)
- 2025年度無(wú)人機(jī)精準(zhǔn)定位服務(wù)采購(gòu)合同文本3篇
- 2025年上半年江蘇連云港灌云縣招聘“鄉(xiāng)村振興專(zhuān)干”16人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- DB3301T 0382-2022 公共資源交易開(kāi)評(píng)標(biāo)數(shù)字見(jiàn)證服務(wù)規(guī)范
- 人教版2024-2025學(xué)年八年級(jí)上學(xué)期數(shù)學(xué)期末壓軸題練習(xí)
- 江蘇省無(wú)錫市2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題(原卷版)
- 俄語(yǔ)版:中國(guó)文化概論之中國(guó)的傳統(tǒng)節(jié)日
- 2022年湖南省公務(wù)員錄用考試《申論》真題(縣鄉(xiāng)卷)及答案解析
- 婦科一病一品護(hù)理匯報(bào)
- 2024年全國(guó)統(tǒng)一高考數(shù)學(xué)試卷(新高考Ⅱ)含答案
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)四 引起受眾傳播內(nèi)容要素的掌控
- 繪本《汪汪的生日派對(duì)》
- 助產(chǎn)護(hù)理畢業(yè)論文
評(píng)論
0/150
提交評(píng)論