tft每日頭條

 > 教育

 > 如何用c語言輸出楊輝三角

如何用c語言輸出楊輝三角

教育 更新时间:2024-07-17 10:05:40

題目:

輸入n,輸出楊輝三角形的前n行。楊輝三角形如下:11 11 2 11 3 3 11 4 6 4 1…每行第一列和最後一列元素均為1其他列元素為其所在位置的上一行對應列和上一行前一列元素之和

如何用c語言輸出楊輝三角(C語言經典算法輸出楊輝三角)1

一個漂亮的楊輝三角

步驟一:首先呢,我喜歡先把大體模樣輸出來,先實現輸入行數n,然後輸出一個由n行字符構成的三角形,如下:

如何用c語言輸出楊輝三角(C語言經典算法輸出楊輝三角)2

大體框架

先不管這個三角形和楊輝三角長得是否一樣,總之利用兩個for循環輸出類似的圖形,是考試必會的,我們之後美化一下圖形。

步驟二:好嘞,接下來該分析一下楊輝三角的特征了:

如何用c語言輸出楊輝三角(C語言經典算法輸出楊輝三角)3

規律1

将上圖楊輝三角按行從第1行開始,列從第0列開始,那麼圖中被圈出來的10和5都是第六行的。

不難得出結論:10=上一行的4 6,5=上一行的4 1。利用這個規律,可以構建二維數組a[][],從而有:

a[i][j]=a[i-1][j-1] a[i-1][j];/*每個數是上面兩數之和*/

//下面是利用上述方法的關鍵代碼

void yanghui(int a[][N])

{

int j, k;

for (j = 0; j<N; j )

{

a[j][0] = 1;

a[j][j] = 1;

}

for (j = 2; j<N; j )

for (k = 1; k<j; k )

a[j][k] = a[j - 1][k - 1] a[j - 1][k];

}

另外一種方法,不知道大家有沒有注意到:

如何用c語言輸出楊輝三角(C語言經典算法輸出楊輝三角)4

規律2

也就是:位于第i行j列的數=(i-j)*前面一個數/j。

即(行數-列數)*前面一個數/列數

好啦,根據這個思想,編寫代碼如下:

int main()

{

int n;

cout << "請輸入行數:" << endl;

cin >> n;

int upNumber = 1;//用來記錄上一個數

for (int i = 1; i <= n; i )

{

upNumber = 1;

//輸出三角空格

for (int j = n; j>i; j--)//這是為了使三角形成為正三角形

{

cout << " ";

}

cout << "1";// 這是輸出每一行的第一個1

for (int j = 1; j <= i - 2; j )

{

upNumber = (i - j) * upNumber / j;

cout << upNumber<<" ";

}

cout << "1" << endl;// 每一行的最後一個 1

}

return 0;

}

如何用c語言輸出楊輝三角(C語言經典算法輸出楊輝三角)5

得到一個歪歪扭扭的三角形

步驟三:接下來先不忙着調整上面這個扭曲的三角形,我們仔細看一下發現第一行輸出了兩個1,這是什麼情況呢。

如何用c語言輸出楊輝三角(C語言經典算法輸出楊輝三角)6

原因

那麼我們可以加一個判斷:

如果是第一行,就直接輸出一個1就好額,其他的行就按規律行事。

如何用c語言輸出楊輝三角(C語言經典算法輸出楊輝三角)7

注意看if-else語句

步驟四:現在可以來調整三角形的樣子啦。

排版嘛,就是空格的多少,百位數的就是一個空格,十位數的就是兩個空格,至于是一位數的話,就是一個空格。

最後暴力解決,長這樣!

如何用c語言輸出楊輝三角(C語言經典算法輸出楊輝三角)8

完整代碼如下:

#include <stdio.h>

#include<iostream>

using namespace std;

int main()

{

int n = 0;

cout << "請輸入行數:" << endl;

cin >> n;

int upNumber = 1;//用來記錄上一個數

int count = 1; //排序時用來記錄數字的長度

int sum = 0;//排序時用來計算的變量

for (int i = 1; i <= n; i )

{

upNumber = 1;

//輸出三角空格

for (int j = n; j>i; j--)//這是為了使三角形成為正三角形

{

cout << " ";

}

if (i == 1) { cout << "1"<<endl; }

else{

cout << "1"<<" " ;// 這是輸出每一行的第一個1

for (int j = 1; j <= i - 2; j )

{

upNumber = (i - j) * upNumber / j;

sum = upNumber;

while (sum>=10)

{

sum /= 10;

count ;

}

if (count == 3) {

cout << upNumber << " ";

count = 1;

}

else if (count == 2) {

cout << upNumber << " ";

count = 1;

}

else {

cout << upNumber << " ";

count = 1;

}

}

cout << "1" << endl;// 每一行的最後一個 1

}

}

return 0;

}

當然啦,上述代碼隻是求解楊輝三角形中最簡單最基礎的兩種。

學渣表示傷不起哇。

歡迎大家提供其他的解決思路~~

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关教育资讯推荐

热门教育资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved