第一篇:奇數(shù)階魔方陣算法分析
C語(yǔ)言程序設(shè)計(jì)教案
奇數(shù)階魔方陣
一、提出問(wèn)題
所謂“奇數(shù)階魔方陣”是指n為不小于3的奇數(shù)的魔方陣。這類(lèi)魔方陣的形式多樣,這里我們僅討論其中的一種形式的正規(guī)魔方陣。例如:3階、5階和7階的魔方陣如圖3 – 4 所示。
3039*********416357,46132022,***2192***211***2414322314049圖3 – 4 3階5階和7階魔方陣
***5
44431211202容易知道,這三個(gè)魔方陣的魔方常數(shù)分別是15、65和175。
現(xiàn)在要求給出:能讓計(jì)算機(jī)自動(dòng)輸出類(lèi)似圖3 – 4 所示的n階奇數(shù)魔方陣的算法,其中n為任意給定的一個(gè)不小于3的奇數(shù)。
二、簡(jiǎn)單分析
決定“奇數(shù)階魔方陣”的關(guān)鍵是要按要求決定其方陣中的各個(gè)數(shù)字。觀察圖3 – 4中的三個(gè)奇數(shù)階魔方陣,不難發(fā)現(xiàn):
1.由于是正規(guī)魔方,故所填入的n 2個(gè)不同整數(shù)依次為1、2、3、…、n 2 ; 2.各行、列和對(duì)角線上的數(shù)字雖各不相同,但其和卻是相同的。這表明,其魔方常數(shù)可由公式n(n 2 + 1)/ 2得到。
3.?dāng)?shù)字在陣列中的次序,并沒(méi)有遵從陣列單元的行、列下標(biāo)的順序,但數(shù)字“1”卻始終出現(xiàn)在陣列第一行的正中間位置,而數(shù)字“n 2”也始終出現(xiàn)在陣列第n行的正中間位置,這說(shuō)明陣列中的數(shù)字排列應(yīng)該是有一定規(guī)律的。
通過(guò)對(duì)兩個(gè)奇數(shù)階魔方陣的簡(jiǎn)單分析,下面幾個(gè)基本問(wèn)題必須得到解決: ◆ 奇數(shù)階魔方陣中的數(shù)字有些什么規(guī)律? ◆ 數(shù)字“1”的位置應(yīng)如何確定?
C語(yǔ)言程序設(shè)計(jì)教案
三、設(shè)計(jì)準(zhǔn)備
1.奇數(shù)階魔方陣中的數(shù)字規(guī)律
通過(guò)對(duì)奇數(shù)階魔方陣的分析,其中的數(shù)字排列有如下的規(guī)律:(1)自然數(shù)1出現(xiàn)在第一行的正中間;
(2)若填入的數(shù)字在第一行(不在第n列),則下一個(gè)數(shù)字在第n行(最后一行)且列數(shù)加1(列數(shù)右移一列);
(3)若填入的數(shù)字在該行的最右側(cè),則下一個(gè)數(shù)字就填在上一行的最左側(cè);(4)一般地,下一個(gè)數(shù)字在前一個(gè)數(shù)字的右上方(行數(shù)少1,列數(shù)加1);
(5)若應(yīng)填的地方已經(jīng)有數(shù)字或在方陣之外,則下一個(gè)數(shù)字就填在前一個(gè)數(shù)字的下方。(一般地,n的倍數(shù)的下一個(gè)數(shù)字是在該數(shù)的下方。)
816按照上述的規(guī)律,我們來(lái)完成3階的魔方陣:357
4921第一步:將“1”填入1行2列的位置,即(按規(guī)律(1));
1第二步:將“2”填入3(最后)行3(= 2 + 1)列的位置,即
(按規(guī)律
2(2));
1第三步:將“3”填入2行1列的位置,即3(按規(guī)律(3));
21第四步:將“4”填入3行1列的位置(“3”的下面);即3(按規(guī)律(5))
422
C語(yǔ)言程序設(shè)計(jì)教案
1第五步:將“5”填入2行2列的位置;即35216(按規(guī)律(4));
4第六步:將“6”填入1行3列的位置,即352(按規(guī)律(4));
416第七步:將“7”填入2行3列的位置(“6”的下面),即357(按規(guī)律(5));
42816第八步:將“8”填入1行1列的位置,即357(按規(guī)律(3));
42816第九步:將“9”填入3行2列的位置,即357(按規(guī)律(2))。492至此,一個(gè)3階魔方陣構(gòu)造完成了。2.?dāng)?shù)字“1”的位置確定方法
由于數(shù)字“1”要填寫(xiě)在魔方陣第一行的正中間,因此我們只需要確定第一行的正中間單元的列下標(biāo)即可。
考慮到對(duì)于一個(gè)奇數(shù)階魔方陣來(lái)說(shuō),它的每一行都有奇數(shù)個(gè)位置,所以“正中間的位置”就必然存在。容易知道,一個(gè)n(為奇數(shù))階魔方陣第一行的正中間單元的列下標(biāo)為整數(shù)(n + 1)/ 2。于是數(shù)字“1”應(yīng)填寫(xiě)在魔方陣列的第1行第(n + 1)/ 2列處。
C語(yǔ)言程序設(shè)計(jì)教案
四、實(shí)施步驟
1.算法編制的工作順序:
有了上述的設(shè)計(jì)準(zhǔn)備,我們所要的算法可按如下的工作順序編制:
第一步:輸入魔方陣的階數(shù)n(為奇數(shù)),并以此定義一個(gè)二維數(shù)組; 第二步:確定所謂“正中間位置”的列下標(biāo)值,以及應(yīng)填入的最大數(shù)字; 第三步:進(jìn)行完成魔方陣的填寫(xiě)工作; 第四步:輸出已完成的奇數(shù)階魔方陣。2.變量設(shè)置:
N :表示魔方陣的階數(shù)(為奇數(shù)); A :表示魔方陣的二維數(shù)組; I :數(shù)組A的行序號(hào); J :數(shù)組A的列序號(hào); R :填入的數(shù)字; S :對(duì)角線上各數(shù)字之和。
3.參考框圖:如圖3 – 5 所示。4.框圖說(shuō)明:整個(gè)框圖應(yīng)分為三個(gè)功能部分:
第一個(gè)部分的功能是完成奇數(shù)N的輸入,并定義二維數(shù)組,完成有關(guān)元素的數(shù)值計(jì)算,同時(shí)能實(shí)現(xiàn)當(dāng)N不是奇數(shù)時(shí)自動(dòng)結(jié)束。圖3 – 5 處理“奇數(shù)階魔方陣”問(wèn)題的框圖
第二個(gè)部分的功能是完成魔方陣的填寫(xiě)工作。
填寫(xiě)并不是按數(shù)組A的下標(biāo)順序進(jìn)行,而是通過(guò)對(duì)有關(guān)規(guī)律的判斷確定下標(biāo)I和J的不同值來(lái)進(jìn)行。其中涉及到了判斷“R是N的整數(shù)倍?”,這可以通過(guò)判斷是否有等式R – INT(R / N)? N = 0 成立來(lái)實(shí)現(xiàn)。
第三個(gè)部分的功能是完成輸出魔方陣和計(jì)算相應(yīng)魔方常數(shù)的工作。
計(jì)算相應(yīng)魔方常數(shù)的工作是通過(guò)對(duì)魔方陣的對(duì)角線中各元素?cái)?shù)值來(lái)實(shí)現(xiàn),即在準(zhǔn)備輸出打印元素A(I , I)時(shí),通過(guò)累加方式S = S + A(I , I)來(lái)實(shí)現(xiàn)。
C語(yǔ)言程序設(shè)計(jì)教案
5.參考算法
第01步:輸入非負(fù)整數(shù)N,并定義數(shù)組 A(N , N); 第02步:若 N – INT(N / 2)? 2 = 0,則結(jié)束。第03步:讓J ?(N + 1)/ 2 , C ? N ? N , 且I ? 1; 第04步:讓 R ? 1;
第05步:若R > C , 則執(zhí)行第16步; 第06步:讓 A(I , J)? R;
第07步:若R – INT(R / N)? N = 0 , 則執(zhí)行第13步; 第08步:讓I ? I – 1 ;
第09步:若I + 1 = 1,則讓I ? N; 第10步:讓J ? J + 1;
第11步:若J – 1 ? N,則執(zhí)行第15步; 第12步:讓J ? 1 , 并執(zhí)行第15步;
第13步:讓I ? I + 1。若I – 1 ? N,執(zhí)行第15步; 第14步:讓I ? 1 ;
第15步:讓R ? R + 1,執(zhí)行第05步; 第16步:讓 S ? 0 , I ? 1 ; 第17步:若I > N , 則執(zhí)行第24步 ; 第18步:讓 S ? S + A(I , I); 第19步:讓J ? 1;
第20步:若J > N , 則執(zhí)行第13步; 第21步:在位置 4 J 處輸出 A(I , J); 第22步:讓J ? J + 1,并執(zhí)行第20步; 第23步:換行,讓I = I + 1 , 并執(zhí)行第17步; 第24步:輸出 S,結(jié)束。
參考算法的編制與框圖稍有不同,但功能是一樣的。其中:
第01步至第03步為第一部分,完成奇數(shù)的輸入,以及有關(guān)的準(zhǔn)備工作。當(dāng)輸入的N不是奇數(shù)時(shí),會(huì)自動(dòng)結(jié)束。第04步至第15步完成魔方陣的填寫(xiě)工作。第16步至第24步完成輸出魔方陣和計(jì)算相應(yīng)魔方常數(shù)的工作。
C語(yǔ)言程序設(shè)計(jì)教案
五、評(píng)估反思
應(yīng)當(dāng)說(shuō),奇數(shù)階魔方陣的形式是多種多樣的,這里我們僅僅只對(duì)其中的一種形式加以討論。這里所編制的參考算法從理論上看可以實(shí)現(xiàn)對(duì)指定形式的任何大小“奇數(shù)階魔方陣”的輸出,但在實(shí)際輸出時(shí)應(yīng)考慮輸出設(shè)備的相關(guān)條件。
在參考算法中,第04步至第15步這部分是整個(gè)算法的核心部分,其功能是完成整個(gè)魔方的數(shù)字填入工作,因此其編制的思想、用到的一些處理方陣元素的技巧和經(jīng)驗(yàn),應(yīng)引起我們的注意。
1.充分利用規(guī)律間共同特性。
在這部分里我們通過(guò)若干次對(duì)下標(biāo)值的判斷,巧妙地將奇數(shù)階魔方陣應(yīng)當(dāng)遵循的規(guī)律(2)、(3)和(4)結(jié)合起來(lái),使魔方陣的填寫(xiě)工作能得以順利進(jìn)行。這是因?yàn)槠鏀?shù)階魔方陣要求的五個(gè)規(guī)律中,規(guī)律(2)、(3)和(4)與單元的下標(biāo)有直接的關(guān)系。
2.選擇首次判斷對(duì)象的要求。
在這部分里我們首先進(jìn)行的是對(duì)填入數(shù)字R是否是階數(shù)N的整數(shù)倍的判斷,這實(shí)際上是將奇數(shù)階魔方陣的規(guī)律(5)作為主要的判斷標(biāo)準(zhǔn)。那么為什么不用另外的四個(gè)規(guī)律來(lái)作為主要的判斷標(biāo)準(zhǔn)呢?這主要是考慮到對(duì)于要填入的數(shù)字,在奇數(shù)階魔方陣的五個(gè)規(guī)律中,只有規(guī)律(5)將該數(shù)字直接與階數(shù)聯(lián)系起來(lái),而另外四個(gè)規(guī)律則沒(méi)有(僅僅與填入單元的下標(biāo)值有直接的聯(lián)系)。這告訴我們,算法的編制應(yīng)注意那些具有單一性特點(diǎn)的事實(shí)、特性或規(guī)律等等。
3.有關(guān)魔方常數(shù)的得到。
要得到魔方常數(shù),最直接的方法是通過(guò)公式S = n(n 2 + 1)/ 2來(lái)計(jì)算,但這樣做不能顯示整個(gè)魔方陣的構(gòu)造是否正確。在參考算法中,我們是通過(guò)累加魔方陣對(duì)角線中各元素?cái)?shù)值來(lái)實(shí)現(xiàn)的,這樣做的好處有,其一是體現(xiàn)了數(shù)字累加方式在算法編制中的作用,其二是顯示了所構(gòu)造的魔方陣是否正確。當(dāng)然,我們也可以通過(guò)累加魔方陣某行或某列中各元素?cái)?shù)值來(lái)實(shí)現(xiàn),只不過(guò)設(shè)計(jì)的步驟要稍多一些,因?yàn)樾枰獜膎行(列)中確定某行(列)的步驟。
4.關(guān)于魔方陣的驗(yàn)證。
本參考算法中沒(méi)有設(shè)計(jì)利用魔方常數(shù)來(lái)判斷所完成的方陣是否是魔方陣的步驟,但設(shè)計(jì)這一功能并不困難。比較方便的做法可以為:在第一部分加入用公式計(jì)算魔方常數(shù)的步驟,將第三部分分成輸出方陣和驗(yàn)證方陣兩部分。在驗(yàn)證部分里,設(shè)計(jì)分別計(jì)算各行、各列及對(duì)角線中各數(shù)字和的步驟,以及將這些數(shù)字和與前面計(jì)算出的魔方常數(shù)進(jìn)行比較的步驟。若對(duì)此有興趣,不妨自己動(dòng)手試試。
C語(yǔ)言程序設(shè)計(jì)教案
六、要點(diǎn)回顧
1.?dāng)?shù)學(xué)思想:構(gòu)成奇數(shù)階魔方陣應(yīng)當(dāng)遵循的五個(gè)規(guī)律;
2.常用公式:判斷“R是N的整數(shù)倍”的等式R – INT(R / N)? N = 0 ; 3.算法技巧:利用累計(jì)方式計(jì)算魔方常數(shù)和完成魔方陣輸出的方法。4.實(shí)用方法:判斷整數(shù)R是否是整數(shù)N的整數(shù)倍的方法。
第二篇:魔方陣 實(shí)驗(yàn)報(bào)告
<< 魔方陣 >>實(shí)驗(yàn)報(bào)告
一. 實(shí)驗(yàn)?zāi)康?/p>
1.設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu);
2.設(shè)計(jì)算法完成任意n階魔方陣的填數(shù); 3.分析算法的時(shí)間復(fù)雜度。
二. 實(shí)驗(yàn)內(nèi)容
魔方陣,又叫幻方陣,在我國(guó)古代稱(chēng)為“縱橫圖”。它是在一個(gè)n*n的矩陣中填入1到n*n的數(shù)字(n為奇數(shù)),使得每一行,每一列,每條對(duì)角線的累加和都相等。
三. 程序代碼
源程序:
#include
int p=0, q=(n-1)/2;
a[0][q]=1;
//在第0行的中間位置填1
for(int i=2;i<=n*n;i++)
{
p=(p-1+n)% n;
//求i所在行號(hào)
q=(q-1+n)% n;
//求i所在列號(hào)
if(a[p][q]>0){
p=(p+2)%n;q=(q+1)%n;
//這兩句進(jìn)行了修改,否者得不到正確的答案,切記切記??!
}//如果位置(p, q)已經(jīng)有數(shù),填入同一列下一行
a[p][q]=i;
}
for(p=0;p {for(q=0;q cout< cout<<'n';} } void main(){ int n;cout<<“請(qǐng)輸入魔方矩陣的階數(shù)n=(n為奇數(shù)且<=9):”;cin>>n;cout<<“魔方陣的排列結(jié)果為:n”; Square(n);} 四.結(jié)果與心得體會(huì) 1.程序的測(cè)試結(jié)果是什么? 答:n=3時(shí) n=5時(shí) 2.在調(diào)試的過(guò)程中遇到了什么問(wèn)題,是如何解決的? 答:在調(diào)試的過(guò)程中遇到了以下幾個(gè)問(wèn)題: 1.Square函數(shù)的形式參數(shù)不可以是(int a[][], int n),因?yàn)槌绦蚴窃诰幾g時(shí)就會(huì)為數(shù)組分配內(nèi)存,而那樣的形式參數(shù)是不合理的。在調(diào)試程序的過(guò)程中,我反復(fù)試了好多次,也證明了那是錯(cuò)的。解決方法:直接將Square函數(shù)的形參設(shè)為(int n),改在在其函數(shù)內(nèi)定義數(shù)組a[9][9],這樣就能將問(wèn)題很好的解決。 2.在書(shū)中提供的Square函數(shù)里面,有一個(gè)語(yǔ)句是這樣的if(a[p][q]>0) p=(p+1)%n;,這個(gè)語(yǔ)句是錯(cuò)的。之所以會(huì)有這樣的錯(cuò)誤,是由于錯(cuò)誤的理解了“如果位置(p, q)已經(jīng)有數(shù),填入同一列下一行”這一句的意思,這句的意思是填入原數(shù)的下面,而不是即將填入的那個(gè)數(shù)但又已填入數(shù)的那個(gè)數(shù)的下面。 解決方法:將該語(yǔ)句改成: if(a[p][q]>0) { p=(p+2)%n;q=(q+1)%n; },這樣就可以了。 3.由于數(shù)組a[][]是在Square函數(shù)中定義的,因此將數(shù)組數(shù)據(jù)輸出的語(yǔ)句就只能放在Square函數(shù)中實(shí)現(xiàn)。 #include void huanFang(int n){ int a[MAX][MAX]={0};//初始化數(shù)組都為0 int i,j;int m,k;//當(dāng)前位置 int p,q;//下一個(gè)位置 int data=0;m=0;k=n/2;while(data q=k+1;//右 if(p<0&&q //printf(“qian shang chu: p=%d,q=%dn”,p,q); p=n-1;//下邊放 //printf(“hou shang chu: p=%d,q=%dn”,p,q);}else if(p>=0&&p //printf(“qian youchu: p=%d,q=%dn”,p,q); q=0;//左邊放 //printf(“hou youchu: p=%d,q=%dn”,p,q);}else if(p<0&&q==n){//斜出框 //printf(“qian xiechu: p=%d,q=%dn”,p,q); p=m+1;//下格填 q=k; //printf(“hou xiechu: p=%d,q=%dn”,p,q);} if(a[p][q]!=0){//排重 //printf(“qian chongpai: p=%d,q=%dn”,p,q); p=m+1;//下格填 q=k; //printf(“hou chongpai: p=%d,q=%dn”,p,q);} m=p;k=q;} for(i=0;i printf(“%d ”,a[i][j]); } printf(“n”);} } void main(){ int n;//判斷是否輸入的是奇數(shù) while(1){ printf(“please input n jie,n is oddn”); scanf(“%d”,&n); if(n%2==1) break;} huanFang(n);} 數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)與分析、計(jì)算機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)組成原理、操作系統(tǒng)原理、編譯原理、數(shù)據(jù)庫(kù)原理及應(yīng)用、軟件工程、軟件測(cè)試等計(jì)算機(jī)基礎(chǔ)理論課程; 網(wǎng)頁(yè)制作、程序設(shè)計(jì)Java、JSP程序設(shè)計(jì)、Oracle、XML程序設(shè)計(jì)、計(jì)算機(jī)網(wǎng)絡(luò)、SSH(Struts+Spring+Hibernate)框架、Java EE程序設(shè)計(jì)、Ajax程序設(shè)計(jì)、Linux+PHP+MySQL程序設(shè)計(jì)、Android手機(jī)開(kāi)發(fā)、UML系統(tǒng)分析與設(shè)計(jì)、性能測(cè)試、自動(dòng)化軟件測(cè)試、軟件質(zhì)量保證、畢業(yè)設(shè)計(jì)及項(xiàng)目綜合實(shí)訓(xùn)等。 數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)組成原理、操作系統(tǒng)原理、編譯原理、數(shù)據(jù)庫(kù)原理及應(yīng)用、金融學(xué)概論、西方經(jīng)濟(jì)學(xué)等基礎(chǔ)理論課程; 網(wǎng)頁(yè)制作、程序設(shè)計(jì)Java、JSP程序設(shè)計(jì)、J2EE程序設(shè)計(jì)、SQL Server數(shù)據(jù)庫(kù)、Oracle數(shù)據(jù)庫(kù)、Linux操作系統(tǒng)、UML系統(tǒng)分析與設(shè)計(jì)、軟件工程、XML程序設(shè)計(jì)、SSH框架、金融市場(chǎng)學(xué)、ERP財(cái)務(wù)管理、管理信息系統(tǒng)、投資銀行學(xué)、商業(yè)銀行學(xué)、國(guó)際金融管理、畢業(yè)設(shè)計(jì)及項(xiàng)目綜合實(shí)訓(xùn)等專(zhuān)業(yè)課程。 數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)組成原理、操作系統(tǒng)原理、數(shù)據(jù)庫(kù)原理及應(yīng)用、軟件工程、軟件測(cè)試等計(jì)算機(jī)基礎(chǔ)理論課程; 網(wǎng)頁(yè)制作、程序設(shè)計(jì)Java、JSP程序設(shè)計(jì)、J2EE程序設(shè)計(jì)、XML程序設(shè)計(jì)、Ajax程序設(shè)計(jì)、SSH框架、Android手機(jī)開(kāi)發(fā)、Linux+PHP+MySQL程序設(shè)計(jì)、SQL Server數(shù)據(jù)庫(kù)、Linux操作系統(tǒng)、UML系統(tǒng)分析與設(shè)計(jì)、軟件項(xiàng)目管理、行業(yè)標(biāo)準(zhǔn)與規(guī)范、IT服務(wù)管理、IT職業(yè)英語(yǔ)、畢業(yè)設(shè)計(jì)及項(xiàng)目綜合實(shí)訓(xùn)等專(zhuān)業(yè)課程 算法設(shè)計(jì)與分析學(xué)習(xí)心得 班級(jí):物聯(lián)網(wǎng)1201 姓名:劉瀟 學(xué)號(hào):1030612129 一、實(shí)驗(yàn)內(nèi)容: 這學(xué)期的算法與設(shè)計(jì)課,老師布置了這四個(gè)問(wèn)題,分別是貨郎擔(dān)問(wèn)題,動(dòng)態(tài)生成二維數(shù)組,對(duì)話框下拉列表,排序問(wèn)題。 二、學(xué)習(xí)掌握: 基本程序描述: (1)貨郎擔(dān)問(wèn)題:貨郎擔(dān)問(wèn)題屬于易于描述但難于解決的著名難題之一,至今世界上還有不少人在研究它。貨郎擔(dān)問(wèn)題要從圖g的所有周游路線中求取具有最小成本的周游路線,而由始點(diǎn)出發(fā)的周游路線一共有(n一1)!條,即等于除始結(jié)點(diǎn)外的n一1個(gè)結(jié)點(diǎn)的排列數(shù),因此貨郎擔(dān)問(wèn)題是一個(gè)排列問(wèn)題。貨郎擔(dān)的程序?qū)崿F(xiàn)了利用窮舉法解決貨郎擔(dān)問(wèn)題,可以在城市個(gè)數(shù)和各地費(fèi)用給定的情況下利用窮舉法逐一計(jì)算出每一條路線的費(fèi)用,并從中選出費(fèi)用最小的路線。從而求出問(wèn)題的解 (2)費(fèi)用矩陣:費(fèi)用矩陣的主要內(nèi)容是動(dòng)態(tài)生成二維數(shù)組。首先由鍵盤(pán)輸入自然數(shù),費(fèi)用矩陣的元素由隨機(jī)數(shù)產(chǎn)生,并取整,把生成的矩陣存放在二維數(shù)組中,最后把矩陣內(nèi)容輸出到文件和屏幕上。它采用分支界限法,分支限界法的基本思想是對(duì)包含具有約束條件的最優(yōu)化問(wèn)題的所有可行解的解(數(shù)目有限)空間進(jìn)行搜索。該算法在具體執(zhí)行時(shí),把全部可行的解空間不斷分割為越來(lái)越小的子集,并為每個(gè)子集內(nèi)的解計(jì)算一個(gè)下界或上界。動(dòng)態(tài)生成二維n*n的數(shù)組程序利用指針表示數(shù)組的行和列,并逐一分配空間,在輸入n的數(shù)值后,系統(tǒng)自動(dòng)分配空間,生成n*n的數(shù)組,并產(chǎn)生隨機(jī)數(shù)填充數(shù)組,最后將結(jié)果輸入到指定文件中。 (3)Mfc:在下拉列表框中添加內(nèi)容程序,在下拉列表對(duì)應(yīng)的函數(shù)中利用addstring添加需要的內(nèi)容。首先定義下拉列表框?yàn)閏combox型,并定義其屬性名,利用addstring函數(shù)可以任意添加需要的內(nèi)容。a排序問(wèn)題:快速排序的運(yùn)行時(shí)間與劃分是否對(duì)稱(chēng)有關(guān),其最壞情況發(fā)生在劃分過(guò)程中產(chǎn)生的兩個(gè)區(qū)域分別包含n-1個(gè)元素和1個(gè)元素的時(shí)候。其算法的時(shí)間復(fù)雜度為O(n 2),在最好的情況下每次劃分的基準(zhǔn)恰好為中值,可得其算法時(shí)間復(fù)雜度為O(n㏒n)。算法的實(shí)現(xiàn)和理解和代碼實(shí)現(xiàn)完全是兩回事,想要完全掌握一種算法,需要?jiǎng)邮謱?shí)踐,用代碼實(shí)現(xiàn),才能理解透徹,真正掌握。b對(duì)話框下拉列表:這個(gè)項(xiàng)目簡(jiǎn)單易懂,輕松實(shí)現(xiàn)。三.疑問(wèn)與總結(jié): 貨郎擔(dān)的問(wèn)題,我認(rèn)為窮舉法相對(duì)比而言是比較初級(jí)的方法,費(fèi)時(shí)耗力,適合在練習(xí)時(shí)選用,但是在實(shí)際問(wèn)題中不建議采用??唆斔箍柣蛘咂绽锬匪惴ㄇ笕∽钚∩蓸?shù)的方法來(lái)解決貨郎擔(dān)的問(wèn)題是更適合現(xiàn)實(shí)解決問(wèn)題的。我認(rèn)為程序可以用switch函數(shù)來(lái)將函數(shù)分成幾個(gè)部分更人性化,比如分為解決問(wèn)題的的選項(xiàng),輸出結(jié)果選項(xiàng),退出程序選項(xiàng)等。再有就是費(fèi)用矩陣的值可以從文件中讀取,而結(jié)果也可以直接放在指定文件中,這樣在實(shí)際應(yīng)用中比較廣泛。 動(dòng)態(tài)生成二維數(shù)組的程序我認(rèn)為如果按照規(guī)范性,我的方法是中規(guī)中矩的,畢竟再向下延伸,生成三維的數(shù)組,需要三層的指針來(lái)實(shí)現(xiàn)。但是就程序的簡(jiǎn)化程度和計(jì)算機(jī)處理時(shí)間來(lái)說(shuō),我認(rèn)為這樣雙層指針的算法有些太占用內(nèi)存,畢竟要給行和列各分配n個(gè)空間。我通過(guò)與同學(xué)的交流,我發(fā)現(xiàn)可以用1位數(shù)組來(lái)實(shí)現(xiàn)二維的n*n的數(shù)組。首先分配n*n的空間,然后通過(guò)循環(huán)在一行的數(shù)據(jù)達(dá)到n時(shí)自動(dòng)換行。這樣程序得到了一定的簡(jiǎn)化,并且減少了一定的內(nèi)存使用。我認(rèn)為這種方法是比較貼合實(shí)際的。 四.心得體會(huì) 在計(jì)算機(jī)軟件專(zhuān)業(yè)中,算法分析與設(shè)計(jì)是一門(mén)非常重要的課程,很多人為它如癡如醉。很多問(wèn)題的解決,程序的編寫(xiě)都要依賴它,在軟件還是面向過(guò)程的階段,就有程序=算法+數(shù)據(jù)結(jié)構(gòu)這個(gè)公式。算法的學(xué)習(xí)對(duì)于培養(yǎng)一個(gè)人的邏輯思維能力是有極大幫助的,它可以培養(yǎng)我們養(yǎng)成思考分析問(wèn)題,解決問(wèn)題的能力。 如果一個(gè)算法有缺陷,或不適合某個(gè)問(wèn)題,執(zhí)行這個(gè)算法將不會(huì)解決這個(gè)問(wèn)題。不同的算法可能用不同的時(shí)間、空間或效率來(lái)完成同樣的任務(wù)。一個(gè)算法的優(yōu)劣可以用空間復(fù)雜性和時(shí)間復(fù)雜度來(lái)衡量。算法可以使用自然語(yǔ)言、偽代碼、流程圖等多種不同的方法來(lái)描述。計(jì)算機(jī)系統(tǒng)中的操作系統(tǒng)、語(yǔ)言編譯系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)以及各種各樣的計(jì)算機(jī)應(yīng)用系統(tǒng)中的軟件,都必須使用具體的算法來(lái)實(shí)現(xiàn)。算法設(shè)計(jì)與分析是計(jì)算機(jī)科學(xué)與技術(shù)的一個(gè)核心問(wèn)題。因此,學(xué)習(xí)算法無(wú)疑會(huì)增強(qiáng)自己的競(jìng)爭(zhēng)力,提高自己的修為,為自己增彩。第三篇:C語(yǔ)言程序編程:輸入奇數(shù),輸出n階幻方矩陣
第四篇:數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)與分析
第五篇:算法設(shè)計(jì)與分析學(xué)習(xí)心得