目录
一.什么是杨辉三角?
二.实现方法
1.直角三角形版
2.等腰三角形版
一.什么是杨辉三角?
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。
形如:
我们不难看出其存在明显的规律。
即:图片的两个斜边都是数字1,其余的数都等于它所在层的肩上(即上一层)的两个数字之和。
二.实现方法
1.直角三角形版
如图:
我们先来实现上面这种简单的杨辉三角版本,由于这种规律是一层一层的,输出每一层时都要以上一层为基础。为此我们可以设置一个二维数组来存储这些数字,以每一层为数列的一行。听不懂的建议直接看下面的图示,更直观。
上面这样的好处是让我们的代码写起来简洁,有规律,不繁琐。每次除输入每行的第一个和最后一个固定不变的1外,其余均可用 a[i][j] = a[i - 1][j - 1] + a[i - 1][j] 进行输入输出。
#include<stdio.h>
#define M 9
int main() {
int a[M][M] = { 0 };
for (int i = 0; i < M; i++) {
for (int j = 0; j<=i; j++) {
if (j == 0 || j == i) {
a[i][j] = 1;
printf("%d ", a[i][j]);
}
else {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
printf("%d ",a[i][j]);
}
}
printf("\n");
}
return 0;
}
结果:
2.等腰三角形版
等腰三角形版这种图形就是真正的杨辉三角了,因此我们要考虑每一行的空格字符的输出了,
不难看出每一行的空格字符输出也是有规律的。
#define M 13 //意为打印M行杨辉三角
int main() {
int a[M][M] = { 0 };
int tmp = M;
for (int i = 0; i < M; i++) {
for (int j = 0; j < tmp - 1;j++) {
printf(" "); //三个空格,格式好看
}
tmp--;
for (int j = 0; j<=i; j++) {
if (j == 0 || j == i) {
a[i][j] = 1;
printf("%3d ", a[i][j]); //%3d占三个字符,再加三个空格,格式好看
}
else {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
printf("%3d ",a[i][j]); //%3d占三个字符,再加三个空格,格式好看
}
}
printf("\n");
}
return 0;
}
结果:
3.杨辉三角OJ题
文章来源:https://www.toymoban.com/news/detail-548462.html
借助 list.get(index) 函数完成文章来源地址https://www.toymoban.com/news/detail-548462.html
import java.util.*;
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> ret = new ArrayList<List<Integer>>();
for(int i=0;i<numRows;i++) {
List<Integer> list = new ArrayList<>();
for(int j=0;j<=i;j++) {
if(j==0 || i==j){ //两边都赋值为1
list.add(1);
}else{
int tmp = ret.get(i-1).get(j-1) + ret.get(i-1).get(j);%中间进行运算
list.add(tmp);
}
}
ret.add(list);
}
return ret;
}
}
到了这里,关于【C语言】-- 杨辉三角的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!