源代碼如下:
目前創(chuàng)新互聯(lián)公司已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、古雷港網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
Private?Sub?Form_Click()????N?=?InputBox("",?"",?5)????ReDim?a(N?+?1,?N?+?1),?b(N?+?1,?N?+?1)????Cls????k?=?8????For?I?=?1?To?N????Print?String((N?-?I)?*?k?/?2?+?1,?"?");????For?J?=?1?To?I????a(I,?1)?=?1????a(I,?I)?=?1????a(I?+?1,?J?+?1)?=?a(I,?J)?+?a(I,?J?+?1)????b(I,?J)?=?Trim(Str(a(I,?J)))????Print?b(I,?J);?String(k?-?Len(b(I,?J)),?"?");????Next?J????Print????Next?IEnd?Sub
運(yùn)行程序,在文本框輸入8,再點(diǎn)窗體,效果圖如下:
擴(kuò)展資料:
楊輝三角在Java中的代碼如下:
public?class?TriangleArray{???public?static?void?main(String[]?args)???{??????final?int?NMAX?=?10;????????//?allocate?triangular?array??????int[][]?odds?=?new?int[NMAX?+?1][];??????for?(int?n?=?0;?n?=?NMAX;?n++)?????????odds[n]?=?new?int[n?+?1];?????????//?fill?triangular?array??????for?(int?n?=?0;?n??odds.length;?n++)?????????for?(int?k?=?0;?k??odds[n].length;?k++)?????????{????????????/*?????????????*?compute?binomial?coefficient?n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)?????????????*/????????????int?lotteryOdds?=?1;????????????for?(int?i?=?1;?i?=?k;?i++)???????????????lotteryOdds?=?lotteryOdds?*?(n?-?i?+?1)?/?i;?????????????odds[n][k]?=?lotteryOdds;?????????}???????//?print?triangular?array??????for?(int[]?row?:?odds)??????{?????????for?(int?odd?:?row)????????????System.out.printf("%4d",?odd);?????????System.out.println();??????}???}}
楊輝三角,又稱賈憲三角形,帕斯卡三角形,是二項(xiàng)式系數(shù)在三角形中的一種幾何排列。左圖的表在我國(guó)南宋數(shù)學(xué)家楊輝1261年所著的《詳解九章算法》一書里就出現(xiàn)了。
前提:端點(diǎn)的數(shù)為1.1、每個(gè)數(shù)等于它上方兩數(shù)之和。2、每行數(shù)字左右對(duì)稱,由1開始逐漸變大。3、第n行的數(shù)字有n項(xiàng)。4、第n行數(shù)字和為2n-1。5、(a+b)^n的展開式中的各項(xiàng)系數(shù)依次對(duì)應(yīng)楊輝三角的第(n+1)行中的每一項(xiàng)
楊輝三角,又稱賈憲三角形,帕斯卡三角形,是二項(xiàng)式系數(shù)在三角形中的一種幾何排列。以下為 n = 5 的楊輝三角。
1行 1
2行 1 1
3行 1 2 1
4行 1 3 3 1
5行 1 4 6 4 1
性質(zhì)
1、每個(gè)數(shù)等于它上方兩數(shù)之和。
2、每行 數(shù)字左右對(duì)稱,由1開始逐漸變大。
3、第n行的數(shù)字有n項(xiàng)。
4、第n行數(shù)字和為2 n-1。
5、第n行的第m個(gè)數(shù)和第n-m+1個(gè)數(shù)相等,即C(n-1,m-1)=C(n-1,n-m)( 組合數(shù)性質(zhì)
之一) [1]
6、每個(gè)數(shù)字等于上一行的左右兩個(gè)數(shù)字之和。可用此性質(zhì)寫出整個(gè)楊輝三角。即第n+1行的第i個(gè)數(shù)等于第n行的第i-1個(gè)數(shù)和第i個(gè)數(shù)之和,這也是組合數(shù)的性質(zhì)之一。即 。 [2]
7、第n行的m個(gè)數(shù)可表示為C(n-1,m-1)(n-1下標(biāo),m-1上標(biāo)),即為從n-1個(gè)不同 元素中取m-1個(gè)元素的組合數(shù)。
組合數(shù)計(jì)算方法:C(n,m)=n!/[m!(n-m)!]
8、(a+b)^n的展開式中的各項(xiàng) 系數(shù) 依次對(duì)應(yīng)楊輝三角的第(n+1)行中的每一項(xiàng)。 [3]
9、將第2n+1行第1個(gè)數(shù),跟第2n+2行第3個(gè)數(shù)、第2n+3行第5個(gè)數(shù)……連成一線,這些數(shù)的和是第4n+1個(gè) 斐波那契數(shù);將第2n行第2個(gè)數(shù)(n1),跟第2n-1行第4個(gè)數(shù)、第2n-2行第6個(gè)數(shù)……這些數(shù)之和是第4n-2個(gè) 斐波那契數(shù)。
10、將各行數(shù)字相排列,可得11的n-1(n為行數(shù))次方:1=11^0; 11=11^1; 121=11^2……;細(xì)心的人可能會(huì)發(fā)現(xiàn)當(dāng)n≥5時(shí)會(huì)不符合這一條性質(zhì),其實(shí)是這樣的:把第n行的最右面的數(shù)字"1"放在個(gè)位,然后把左面的一個(gè)數(shù)字的個(gè)位對(duì)齊到十位... ...,以此類推,把空位用“0”補(bǔ)齊,然后把所有的數(shù)加起來,得到的數(shù)正好是11的n-1次方。以n=11為例,第十一行的數(shù)為:1,10,45,120,210,252,210,120,45,10,1;
C語(yǔ)言代碼實(shí)現(xiàn)打印輸出
網(wǎng)上很多都是利用二維數(shù)組實(shí)現(xiàn),對(duì)于 n 很小的情況下,當(dāng)然可以,但對(duì)于n比較大的時(shí)候,二維數(shù)組就比較消耗內(nèi)存了,以下方法直接利用第7條性質(zhì),直接計(jì)算輸出楊輝三角,代碼如下所示。
#includestdio.h
void print_yanghui_triangle(int n)
{
span style="white-space:pre" /spanint i, j, k, s;
span style="white-space:pre" /spanfor(i = 1; i = n; i++)
span style="white-space:pre" /span{
span style="white-space:pre" /spanfor(j = 1; j = i; j++)
span style="white-space:pre" /span{
span style="white-space:pre" /spans = 1;
span style="white-space:pre" /spank = 1;
span style="white-space:pre" /span//計(jì)算第 i 行的第 j 個(gè)數(shù)
span style="white-space:pre" /spanfor(k = 1; k j; k ++)
span style="white-space:pre" /span{
span style="white-space:pre" /spans = s * (i - k)/k;
span style="white-space:pre" /span}
span style="white-space:pre" /spanprintf("%2d\t", s);
span style="white-space:pre" /span}
span style="white-space:pre" /spanprintf("\n");
span style="white-space:pre" /span}
}
int main()
{
span style="white-space:pre" /spanint n = 0;
span style="white-space:pre" /span
span style="white-space:pre" /spanprintf("Input line of YangHui Triangle: ");
span style="white-space:pre" /spanscanf("%d", n);
span style="white-space:pre" /spanprint_yanghui_triangle(n);
span style="white-space:pre" /span
span style="white-space:pre" /spanreturn 0;
}
輸出結(jié)果如下:
Input line of YangHui Triangle: 9
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
總結(jié):注意計(jì)算第 i 行第 j 列數(shù)字的方法,示范代碼的計(jì)算方式,能夠避免很快溢出(按照公式計(jì)算,大概 n = 13 就為負(fù)數(shù)了)。本示范代碼,能夠計(jì)算到 n = 30,改成 long long型,能夠處理更多,但仍然避免不了最終溢出。
原文鏈接:
VB代碼:
Option Base 1
Private Sub form_click()
Const n=10
Dim arr(n,n)As Integer
For i=1 To n
arr(i,i)=1
arr(i,1)=1
Next i
For i=3 To n
For j=2 To i-1
arr(i,j)=arr(i-1,j-1)+arr(i-1,j)
Next j
Next i
For i=1 To n
For j=1 To i
Print arr(i,j);
Next j
Next i
End Sub
輸出結(jié)果:
擴(kuò)展資料:
printf的格式
printf函數(shù)的原型為:
#includelt;stdio.hgt;
int printf(const char*format,...);
在講每一個(gè)函數(shù)的時(shí)候都會(huì)先把它的函數(shù)原型寫出來,這個(gè)原型你們現(xiàn)在看不懂不要緊,等到學(xué)完C語(yǔ)言之后再來看這個(gè)原型就會(huì)發(fā)現(xiàn)它是很有參考意義的!它對(duì)深刻理解函數(shù)有著很大的價(jià)值。
printf的格式有四種:
1)printf("字符串\n");
#includelt;stdio.hgt;
int main(void)
{
printf("Hello World!\n");//\n表示換行
return 0;
}
其中\(zhòng)n表示換行的意思。它是一個(gè)轉(zhuǎn)義字符,前面在講字符常量的時(shí)候見過。其中n是“new line”的縮寫,即“新的一行”。
此外需要注意的是,printf中的雙引號(hào)和后面的分號(hào)必須是在英文輸入法下。雙引號(hào)內(nèi)的字符串可以是英文,也可以是中文。
2)printf("輸出控制符",輸出參數(shù));
#includelt;stdio.hgt;
int main(void)
{
int i=10;
printf("%d\n",i);/*%d是輸出控制符,d表示十進(jìn)制,后面的i是輸出參數(shù)*/
return 0;
}
這句話的意思是將變量i以十進(jìn)制輸出。
i本身就是十進(jìn)制,程序中雖然寫的是i=10,但是在內(nèi)存中并不是將10這個(gè)十進(jìn)制數(shù)存放進(jìn)去,而是將10的二進(jìn)制代碼存放進(jìn)去了。計(jì)算機(jī)只能執(zhí)行二進(jìn)制0、1代碼,而0、1代碼本身并沒有什么實(shí)際的含義,它可以表示任何類型的數(shù)據(jù)。
所以輸出的時(shí)候要強(qiáng)調(diào)是以哪種進(jìn)制形式輸出。所以就必須要有“輸出控制符”,以告訴操作系統(tǒng)應(yīng)該怎樣解讀二進(jìn)制數(shù)據(jù)。
如果是%x就是以十六進(jìn)制的形式輸出,要是%o就是以八進(jìn)制的形式輸出。
3)printf("輸出控制符1輸出控制符2…",輸出參數(shù)1,輸出參數(shù)2,…);
#includelt;stdio.hgt;
int main(void)
{
int i=10;
int j=3;
printf("%d%d\n",i,j);
return 0;
}
輸出控制符1對(duì)應(yīng)的是輸出參數(shù)1,輸出控制符2對(duì)應(yīng)的是輸出參數(shù)2……編譯、鏈接、執(zhí)行后看一下輸出結(jié)果:
10 3
注意:10和3之間有一個(gè)空格;因?yàn)樯厦?d和%d之間有空格,printf中雙引號(hào)內(nèi)除了輸出控制符和轉(zhuǎn)義字符\n外,所有其余的普通字符全部都原樣輸出。比如:
#includelt;stdio.hgt;
int main(void)
{
int i=10;
int j=3;
printf("i=%d,j=%d\n",i,j);
return 0;
}
再編譯、鏈接、執(zhí)行一下:
i=10,j=3
i=、,、空格和j=全都原樣輸出了。此外需要注意的是:“輸出控制符”和“輸出參數(shù)”無(wú)論在“順序上”還是在“個(gè)數(shù)上”一定要一一對(duì)應(yīng)。
4)printf("輸出控制符非輸出控制符",輸出參數(shù));
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim n As Integer, i As Integer, j As Integer, a(,) As Integer
n = 10
ReDim a(n + 1, n + 1)
For i = 1 To n + 1
a(i, 1) = 1 : a(i, i) = 1 : Next i
For i = 3 To n + 1
For j = 2 To i - 1
a(i, j) = a(i - 1, j - 1) + a(i - 1, j)
Next j, i
For i = 1 To n + 1
For j = 1 To i
TextBox1.AppendText(Space(4 - Len(Trim(Str(a(i, j))))) Trim(Str(a(i, j))))
Next j
TextBox1.AppendText(vbCrLf)
Next i
End Sub
End Class
參考:
以下為十行的楊輝三角輸出,根據(jù)這個(gè)自己做相應(yīng)修改,都做好了,那你就是伸手黨了。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j As Integer
Dim n As Integer
n = 10
Dim dete(n, n) As Integer
Dim sum As Integer
For i = 0 To n
For j = 0 To i
If i = 0 Then
dete(i, j) = 1
ElseIf j = 0 Then
dete(i, j) = 1
ElseIf i = j Then
dete(i, j) = 1
Else
dete(i, j) = dete(i - 1, j - 1) + dete(i - 1, j)
End If
Next
Next
For i = 0 To n
For j = 0 To i
Debug.Write(dete(i, j) " ")
sum += dete(i, j)
Next
Debug.WriteLine(" ")
Next
End Sub
End Class