首页 技术 正文
技术 2022年11月9日
0 收藏 955 点赞 2,345 浏览 2001 个字

实现效果:杨辉三角

即:

 提示用户输入要实现的杨辉三角行数:请输入杨辉三角的行数:
8代码实现后的效果如下:
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

  

  在这里我将用到js中数组的知识来完成,我将用二维数组来储存这个序列,其中外层数组储存所有的值,里层数组将储存每一行的值。

  我的思路是:

    1.获取用户输入要的行数。

    2.创建二维数组并进行计算,优先计算出所需要的数值,并按行储存,输出之后效果如下:

      1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

    3.对以上的数据,按照杨辉三角的要求进行调整格式,即在每行数字的前面增加相应的空格。

     

方法中的难点如下: 

  1.创建数组

  众所周知,js中创建的数组为一维数组,但是我要用二维数组才能完成,那么就要用到js中的构造函数创建数组的方法创建一个伪二维数组,代码如下:

    let arr = [];   //创建一维数组(用作外层,储存所有数据)
for(let i=0;i<lineCount;i++){ //lineCount 为变量,用于存储用户输入的行数
arr[i]=new Array(i+1); //对每行创建一个长度为i+1的数组,用于存储每行的数据
}

  以上代码中,二维数组长度给了i+1,实际上对应了杨辉三角的行数和当前行的数字数量相同的特征,给了长度,方便后面直接对其赋值。若不给长度,后面就要用push的方法增加,但是我不建议这样做,如果用push增加数据进去,会造成增加的数据不便于后期计算(亲测试验过的,感兴趣的小伙伴也可以自己实践体会下)。

  2.按照规律进行计算,杨辉三角的规律为:除了每行的第一个数和最后一个数为1外,中间的数为上一行的对应的两个数相加的和。

for (let i = 0; i < lineCount; i++) {
// 计算每个值装进数组中
for (let j = 0; j <= i; j++) {
if (j == 0 || j == i) { //每行第1个和最后1个值为1
arr[i][j] = 1;
} else {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; //计算和值,本行的值是上1行对应列的数与其前一个数相加的结果
}
}
}

  3.添加空格。每行的空格数为 lineCount- i – 1个,并输出

for (let i = 0; i < lineCount; i++) {// 添加空格nbsp = ”;for (let j = 0; j < lineCount – i – 1; j++) {nbsp += ‘ ‘;}console.log(nbsp+arr[i])}

完整的代码如下:

let readline = require('readline-sync');
console.log('请输入杨辉三角的行数:');
let line = ~~readline.question('');
// 1.先将杨辉三角做成如下形式
// 1
// 1 1
// 1 2 1
// 1 3 3 1
// 1 4 6 4 1
// 2.添加空格
// arr存储所有的数据
let arr = [],nbsp = '';
// 创建二维数组,每行作为1个数组保存
for (let i = 0; i < line; i++) {
arr[i] = new Array(i + 1);
}
for (let i = 0; i < line; i++) {
// 计算每个值装进数组中
for (let j = 0; j <= i; j++) {
if (j == 0 || j == i) {
arr[i][j] = 1;
} else {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
for (let i = 0; i < line; i++) {
// 添加空格
nbsp = '';
for (let j = 0; j < line - i - 1; j++) {
nbsp += ' ';
}
console.log(nbsp+arr[i])
}

  

实际上这样实现还存在一个问题,当要输出的行过多的情况下,就会出现三角形逐渐偏斜的情况如下,影响美观。我暂未想到办法解决,若有兴趣的小伙伴想到办法可以留言探讨。

请输入杨辉三角的行数:
15 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
1.9.36.84.126.126.84.36.9.1
1.10.45.120.210.252.210.120.45.10.1
1.11.55.165.330.462.462.330.165.55.11.1
1.12.66.220.495.792.924.792.495.220.66.12.1
1.13.78.286.715.1287.1716.1716.1287.715.286.78.13.1
1.14.91.364.1001.2002.3003.3432.3003.2002.1001.364.91.14.1

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,490
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,291