楊輝三角,也算是乙個經典的題目了。就簡單的說說。
寫**之前,先分析要做的東西的特點,找到規律,再把這個規律描述一下。
然後把這個描述翻譯成程式語言,就可以說是程式設計了。
那麼楊輝三角有什麼特點?
首先是個三角,在數學裡邊,我們手寫畫出來,就像乙個等腰三角形。
而在計算裡邊,列印個等腰三角形,還真不不太容易,好在三角的形狀不是我們關注的重點,所以,我們這個三角形,是直角三角形,腰沒了。
這個三角形有還有什麼特點呢?
先是元素個數,這個有個特點,就是當前是第幾行,那麼這行就會有幾列,比如,第一行,那麼只有一列,第二行,就有兩列,第三行有三列……
還有頂點(前兩行)和兩邊,都是1,並且所有對稱,每一行如果是乙個字串的話, 這就屬於乙個回文串。
那什麼是回文串?可不是回族文字的字串啊,是正讀反讀都是一樣的字串。比如:123454321,abcdedcba等等
那麼再看看,還有其他特點麼?
答案是肯定的,還有乙個特點就是,從第三行開始,每行(除了第乙個和最後乙個)數字,都是上一行,同列的值加上上一行前一列的值的和。
到這裡,基本上就算是分析完了。理論上,我們把這些翻譯成**,這也就算寫完了。
但是任何語言的翻譯,都是要再修飾,太直白的翻譯,硬!所以,後續根據情況,還要做些優化。
嘗試寫**:
1、三角形(直角),其實就是乙個長方形對角線的一半。可以理解成乙個二維陣列,一半有值,一半空。
const lines int = 10;這樣就定義了乙個10行,10列的陣列var yh [lines][lines]int;
矩陣有了,還要有座標。因為要用迴圈來操作嘛,迴圈的時候,二維陣列我們習慣用「i」和「j」來做下標,我們也順便把兩個變數看成座標。i就是行,j就是列。
2、頂點(前兩行)和兩邊都是1,從第三行開始,每行(除了第乙個和最後乙個)數字,都是上一行,同列的值加上上一行前一列的值的和
if i < 2 elseelse上邊,這段**,同樣是翻譯了之前的一段描述,也就是楊輝三角的特點。到此為止,我們的**關鍵部分基本完成了,還有**呢?}
想想,哦~~還有個第幾行,就是第幾列。二維陣列嘛,半個三角。那麼如何寫呢?
for i := 0; i < lines; i++以上**,就是用到的迴圈。那麼到這裡,所有的**翻譯完成。這樣就把這個楊輝三角完成了。
在迴圈過程中,可以輸出資料,配合格式符,就是乙個三角。
迴圈結束,陣列的下標,就是楊輝三角的座標,可以根據座標,返回對應座標的數字。
下邊是完整**:
package main;輸出效果:import (
"fmt"
);const lines int = 10;//設定楊輝三角10行,同時也相當於10列
func showyanghui()elseelse
}fmt.printf("%d\t", yh[i][j] );//格式化輸出一行
} fmt.print("\n");//換行 }}
func main();
楊輝三角實現
楊輝三角是二項式係數在三角形中的一種幾何排列,最早是由楊輝在 詳解九章演算法 提出的,比國外要早了393年。著名的數學問題比如兔子生小兔子 斐波那契數列 猴子吃桃子 每天吃一半多乙個,最後還剩乙個 氣泡排序等等。下面試著用c來實現楊輝三角 怎麼實現它呢?include void main for i...
python楊輝三角 楊輝三角I II
給定乙個非負整數 numrows,生成楊輝三角的前 numrows 行。在楊輝三角中,每個數是它左上方和右上方的數的和。示例 輸入 5 輸出 1 1,1 1,2,1 1,3,3,1 1,4,6,4,1 可以一行一行錯位加,當然這裡提供更簡便的方法。任取一行描述 1,2,1 如何得到 1,3,3,1 ...
用python實現楊輝三角和倒楊輝三角
因為我只有c的基礎所以很多東西是生辦過來的,方法可能有些笨,請諒解。不說了直接附上 import numpy as np 整形輸入 n int input 根據輸入大小來建立矩陣 x,y n,2 n 1 生成全零的numpy矩陣 a np.zeros x,y dtype int 根據規律填數 for...