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=上【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目一行的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];

}

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

规律2

也就是:位于第i行j列的【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目数=(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++)

{

upNumbe【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目r = (i – j) * upNumber / j;

cout << upNumber<<” “;

}

cout << “1” << endl;// 每一行的最后一个 1

}

return 0;

}

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

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

原因

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

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

注意看if-else语句

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

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

最后暴力解决,长这样!

完整代码如下:【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目

#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 (【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目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 {【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目

cout << upNumber << ” “;

count = 1;

}

}

cout << “1” << endl;// 每一行的最后一个 1

}

}

return 0;

}

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

学渣表示伤不起哇。

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

推荐阅读

给力项目线报网会员可免费下载 加入会员
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:226333560 站长微信:qgzmt2
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

知名抗体公司排名(全球知名抗体公司点将谱)

2024-5-3 12:07:41

行业资讯

好用的在线条码生成工具推荐下载软件(好用的在线条码生成工具推荐)

2024-5-3 12:29:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索