【威哥說】沒有接觸過程序的同學(xué),感覺代碼距離我們很好遙遠(yuǎn)嗡贺,可是你真正的學(xué)會了編程之后鞍帝,你才知道帕涌,其實(shí)程序可是實(shí)現(xiàn)所有的事物。本篇文章就是波波老師針對一個學(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)魁袜。首先我們看一下效果圖:
如上圖所示峰弹,這里我們從控制臺輸入要顯示的行數(shù)鞠呈,然后來具體的進(jìn)行顯示师幕。
首先霹粥,總結(jié)規(guī)律如下:
第n行的第一個數(shù)為1疼鸟,第二個數(shù)為1x(n-1)空镜,第三個數(shù)為1x(n-1)x(n-2)/2,第四個數(shù)為1x(n-1)x(n-2)/2x(n-3)/3…依次類推张抄。
那么找到規(guī)律了洼怔,就很好解決了镣隶,具體如何用代碼來實(shí)現(xiàn)?
首先看到這么一個圖形轻猖,首先第一反應(yīng)嵌套循環(huán)是跑不掉的域那,如果沒有第一時間對嵌套
循環(huán)產(chǎn)生想法,那么證明你三角形還是畫少了王带。檐束。。盟戏;
首先我們通過Scanner獲取一個鍵盤輸入的數(shù):
Scanner input = new Scanner(System.in);
int n = input.nextInt();
那么首先外層循環(huán)控制行數(shù):
for( int i = 1 ; i <=n ; i++ ){
//由上面的布局來看柿究,前面是要輸出一個倒三角的空格形狀的蝇摸,那么此處我們用空格給代替
//由于倒三角是上面多下面少办陷,呈遞減趨勢民镜,所以我們初始位置為n,判斷條件為j>=i们童,趨勢為遞減慧库,就能得到一個遞減的趨勢了馋嗜。
for (int j = n; j >=i; j--) {
//這里輸出空格
System.out.print(" ?");
}
//由上面的總結(jié)我們看一下
第一個數(shù): ? ?a1 = 1
第二個數(shù): ? ?a2 = a1x(n-1)
第三個數(shù): ? ?a3 = a2x(n-2)/2
第四個數(shù): ? ?a4 = a3x(n-3)/3
… …
總結(jié)出來規(guī)律就是每行后一個數(shù)是前一個數(shù)乘以(n-(第幾個數(shù)-1))/(第幾個數(shù)-1)嵌戈;
所以每輪需要一個數(shù)來記錄前一個數(shù)的值熟呛,這里我們定義一個sum,初始值等于1
int sum = 1;
//首先需要一個內(nèi)層循環(huán)控制每行的個數(shù)庵朝,而且我們發(fā)現(xiàn)每行的個數(shù)是遞增的所以又厉,初始為1覆致,小于等于i肺蔚,就能達(dá)成遞增的趨勢
for (int j = 1; j <= i; j++) {
//上圖可以看出很明顯每行第一個都是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();
}
如上就是整個的楊輝三角的實(shí)現(xiàn)邏輯了仇冯,個人覺得其實(shí)比網(wǎng)上二維數(shù)組的要好理解一些苛坚,大家闊以研究研究。