当前位置: ManBetXapp > 百科 > 教育 >正文

C 语言输出杨辉三角。

人气:287 ℃ /2023-08-20 07:19:32

工具/材料

gcc+vim(linux)或visual studio(windows)

操作方法

使用vim创建一个文件yanghui.c,并打开它进行编辑。

首先输入预处理指令 #include ,用于调用输出函数printf。

编译一个函数void yanghui(int n)。其中,n表示二项式的次数。

首先,对二项式的幂次进行检查,若小于0,说明输入的次数是不合法的,直接结束打印并给出提示。

然后定义一个(n+1)*(n+1)的二维数组并初始化所有值为0。

然后根据杨辉三角的规律给数组赋值:

每一行的第一个与最后一个数都是1;

其他的数等于该数的上面一个数与左上角的数之和。

对杨辉三角进行输出,不相关的数组数据不输出,并注意换行。

在main函数中对 void yanghui(int n)进行测试,选用参数为3, 7, 10。

保存文档并进行编译输出的结果如下:

由此可以验证我们的程序是正确的。

C语言输出杨辉三角

C语言经典算法|输出杨辉三角,这可是期末考试必须要会的程序啊

题目:

输入n,输出杨辉三角形的前n行。杨辉三角形如下:11 11 2 11 3 3 11 4 6 4 1…每行第一列和最后一列元素均为1其他列元素为其所在位置的上一行对应列和上一行前一列元素之和

一个漂亮的杨辉三角

步骤一:首先呢,我喜欢先把大体模样输出来,先实现输入行数n,然后输出一个由n行字符构成的三角形,如下:

大体框架

先不管这个三角形和杨辉三角长得是否一样,总之利用两个for循环输出类似的图形,是考试必会的,我们之后美化一下图形。

步骤二:好嘞,接下来该分析一下杨辉三角的特征了:

规律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

{

a[j][0] = 1;

a[j][j] = 1;

}

for (j = 2; j

for (k = 1; k

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

}

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

规律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;

}

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

步骤三:接下来先不忙着调整上面这个扭曲的三角形,我们仔细看一下发现第一行输出了两个1,这是什么情况呢。

原因

那么我们可以加一个判断:

如果是第一行,就直接输出一个1就好额,其他的行就按规律行事。

注意看if-else语句

步骤四:现在可以来调整三角形的样子啦。

排版嘛,就是空格的多少,百位数的就是一个空格,十位数的就是两个空格,至于是一位数的话,就是一个空格。

最后暴力解决,长这样!

完整代码如下:

#include

#include

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"<

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;

}

当然啦,上述代码只是求解杨辉三角形中最简单最基础的两种。

学渣表示伤不起哇。

欢迎大家提供其他的解决思路~~

搜索更多有关“ C 语言输出杨辉三角。”的信息 [百度搜索] [SoGou搜索] [头条搜索] [360搜索]
CopyRight © 2008-2024 ManBetXappAll Rights Reserved. 手机版