【威哥說】沒有接觸過程序的同學(xué)尉间,感覺代碼距離我們很好遙遠(yuǎn)巍膘,可是你真正的學(xué)會(huì)了編程之后摊沉,你才知道狐史,其實(shí)程序可是實(shí)現(xiàn)所有的事物。本篇文章就是波波老師針對(duì)一個(gè)學(xué)生的提問说墨,單純的使用循環(huán)和判斷實(shí)現(xiàn)的楊輝三角骏全。大家一起學(xué)習(xí)一下吧。
有學(xué)生問到楊輝三角該如何用代碼實(shí)現(xiàn)尼斧,說來也有意思姜贡,他把規(guī)律都總結(jié)完了,就是寫不出來代碼棺棵,我一問是為什么楼咳,小伙說不能用數(shù)組,就單純的用循環(huán)和判斷來實(shí)現(xiàn)律秃,想想覺得還挺有意思爬橡,就整理了整理治唤。
網(wǎng)上找了找代碼棒动,有趣的是都是用的二維數(shù)組來實(shí)現(xiàn)的,所以就沒有具體去研究了宾添,看看如何自己來實(shí)現(xiàn)船惨。首先我們看一下效果圖:
如上圖所示,這里我們從控制臺(tái)輸入要顯示的行數(shù)缕陕,然后來具體的進(jìn)行顯示粱锐。
首先,總結(jié)規(guī)律如下:
第n行的第一個(gè)數(shù)為1扛邑,第二個(gè)數(shù)為1x(n-1)怜浅,第三個(gè)數(shù)為1x(n-1)x(n-2)/2,第四個(gè)數(shù)為1x(n-1)x(n-2)/2x(n-3)/3…依次類推蔬崩。
那么找到規(guī)律了恶座,就很好解決了,具體如何用代碼來實(shí)現(xiàn)沥阳?
首先看到這么一個(gè)圖形跨琳,首先第一反應(yīng)嵌套循環(huán)是跑不掉的,如果沒有第一時(shí)間對(duì)嵌套
循環(huán)產(chǎn)生想法桐罕,那么證明你三角形還是畫少了脉让。桂敛。。溅潜;
首先我們通過Scanner獲取一個(gè)鍵盤輸入的數(shù):
Scanner input = new Scanner(System.in);
int n = input.nextInt();
那么首先外層循環(huán)控制行數(shù):
for( int i = 1 ; i <=n ; i++ ){
//由上面的布局來看术唬,前面是要輸出一個(gè)倒三角的空格形狀的,那么此處我們用空格給代替
//由于倒三角是上面多下面少伟恶,呈遞減趨勢(shì)碴开,所以我們初始位置為n,判斷條件為j>=i博秫,趨勢(shì)為遞減潦牛,就能得到一個(gè)遞減的趨勢(shì)了。
for (int j = n; j >=i; j--) {
//這里輸出空格
System.out.print(" ?");
}
//由上面的總結(jié)我們看一下
第一個(gè)數(shù): ? ?a1 = 1
第二個(gè)數(shù): ? ?a2 = a1x(n-1)
第三個(gè)數(shù): ? ?a3 = a2x(n-2)/2
第四個(gè)數(shù): ? ?a4 = a3x(n-3)/3
… …
總結(jié)出來規(guī)律就是每行后一個(gè)數(shù)是前一個(gè)數(shù)乘以(n-(第幾個(gè)數(shù)-1))/(第幾個(gè)數(shù)-1)挡育;
所以每輪需要一個(gè)數(shù)來記錄前一個(gè)數(shù)的值巴碗,這里我們定義一個(gè)sum,初始值等于1
int sum = 1;
//首先需要一個(gè)內(nèi)層循環(huán)控制每行的個(gè)數(shù),而且我們發(fā)現(xiàn)每行的個(gè)數(shù)是遞增的所以即寒,初始為1橡淆,小于等于i,就能達(dá)成遞增的趨勢(shì)
for (int j = 1; j <= i; j++) {
//上圖可以看出很明顯每行第一個(gè)都是1母赵,那么我們就判斷如果為1直接輸出
if (j == 1) {
System.out.print(1+" ? ");
}else{
//后邊就是直接通過基礎(chǔ)的編碼來實(shí)現(xiàn)咱們發(fā)現(xiàn)的邏輯了
sum*=(i-(j-1));
sum/=(j-1);
System.out.print(sum+" ? ");
}
}
System.out.println();
}
如上就是整個(gè)的楊輝三角的實(shí)現(xiàn)邏輯了逸爵,個(gè)人覺得其實(shí)比網(wǎng)上二維數(shù)組的要好理解一些,大家闊以研究研究凹嘲。