最近加緊學(xué)C#,同時(shí)又想再看看算法。誰要咱們在科研口,就是一個(gè)自己的時(shí)間多,當(dāng)然money也就少些了。
書買了不少,什么《21天學(xué)通C#》、《C#Primer》還有《Microsoft .Net框架程序設(shè)計(jì)(修訂版)》。當(dāng)然這些書的選擇是本人看了不少書評后才買的,看了看都是不錯(cuò)的選擇,好書!
書雖好但也要人用心來看啊,本人利用業(yè)余時(shí)間基本已瀏覽一遍,更細(xì)的知識(shí)點(diǎn)就要在以后的學(xué)習(xí)中好好掌握了。
說到這里,說出來你死都不會(huì)相信我在單位還是個(gè)小頭,平日里受盡老老少少、上上下下的“氣”,只有下班后在書中找到一刻安寧。讀書的目的至于此可見已是一種悲哀了。
我下定決心,不論單位的事和家里的事有多忙,每周寫一篇學(xué)習(xí)周記,而非日記,日記是肯定沒有時(shí)間來寫的了。
先易后難,看了一下很久前買的一本《程序員高級程序員級 程序設(shè)計(jì)(第二版)》這本書上有不少好的算法例子,它們原來都是用C寫的,我用C#重寫一遍,在做一個(gè)小工具展示一下,這樣比較直觀。
第一個(gè)我們來看看P96上的生成魔方陣問題。
魔方陣是指元素為自然數(shù)1,2,…,N2 的N×N方陣,每個(gè)元素值均不相等,每行、列及主、副對角線上各N個(gè)元素之和都相等。
對奇階魔方陣,可用Dole Rob算法生成,其過程為:從1開始,以此插入各自然數(shù),直到N2為止。選擇插入位置原則為:
a. 第一個(gè)位置在第一行的正中;
b. 新位置應(yīng)當(dāng)處于最近一個(gè)插入位置右上方,但如右上方位置已超出方陣上邊界,則新位置取應(yīng)選列的最下一個(gè)位置;如超出右邊界則新邊界取應(yīng)選行的最左一個(gè)位置;
c. 若最近一個(gè)插入元素為N的整數(shù)倍,則選下面一行同列的位置為新位置。
本算法的實(shí)現(xiàn)就需要用到二維整數(shù)數(shù)組實(shí)現(xiàn)方陣。
核心算法如下:
private void button1_Click(object sender, System.EventArgs e)
{ //這部分為生成魔方陣的Dole Rob算法。
int count,curi,curj;
int i,j;
int[,] magic=new int[3,3];
string a;
curi=0;
curj=1;
for(count=1;count<=9;count++)
{
magic[curi,curj]=count;
if((count%3)==0)//最近一個(gè)插入元素為階數(shù)的整數(shù)倍,則選下面一行同列上的位置為新位置。
{
curi+=1;
continue;
}
curi=curi-1;
curj=curj+1;
if(curi<0)
curi+=3;
else if(curj==3)
curj-=3;
}
textBox1.AppendText("\n");//下面在textBox1中顯示生成的魔方陣
for (i=0;i<3;i++)
{ textBox1.AppendText("\n");
for(j=0;j<3;j++)
{ a = Convert.ToString(magic[i,j]);
textBox1.AppendText(a);
textBox1.AppendText(" ");
}
textBox1.AppendText("\n");
}
label1.Text="本例中的魔方陣的階數(shù)這里取3,當(dāng)然也可以增加控制階數(shù)的控件,為了簡單這里不再給出。";
}
圖1 點(diǎn)擊“生成魔方塊”按鈕前
圖2 點(diǎn)擊“生成魔方塊”按鈕后
在重寫改算法時(shí),有幾個(gè)問題給我印象很深:
a. magic[curi,curj]是這樣寫,而不是寫成magic[curi],[curj],后者是c的寫法。
b. a = Convert.ToString(magic[i,j])這一句很關(guān)鍵,否則結(jié)果無法在textBox1中顯示,convert類是在system命名空間中的,它的一些方法轉(zhuǎn)換數(shù)據(jù)類型起來很有用。為什么要轉(zhuǎn)換,因?yàn)閠extBox1.AppendText(a)中a一定要為string類型。
c. C#語言里是嚴(yán)格區(qū)分大小寫的。
好了,就寫到這里吧,你別說做你喜歡的事情即使累心里也甜甜的。
明天又要………,當(dāng)老百姓最快活但老百姓的獎(jiǎng)金畢竟少些,矛盾啊,嘿嘿,J。
|