杨辉三角的前五行如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1、首先我们可以定义定义一个5行5列的二维数组
代码:
int main() {
int arr[5][5] = { 0 };
初始化
int i = 0;
int j = 0;
//循环输出
for (i = 0; i < 5; i++) {
for (j = 0; j <5; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
2、通过观察我发现 杨辉三角的第一列和对角线上的元素都是1
那么我们就把这个二维数组的第1列元素和 对角线元素都赋值为1
i 代表行 j代表列
代码:
int main() {
int arr[5][5] = { 0 };
初始化
int i = 0;
int j = 0;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
if (j== 0) {
arr[i][j] =1;
}
if (i == j) {
arr[i][j] =1;
}
}
}
//
//循环输出
for (i = 0; i < 5; i++) {
for (j = 0; j <5; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
3、通过观察可以发现 从数字2开始 它的值等于上一行的两个相邻元素相加
即:a[i][j]=a[i-1][j-1]+a[i-1][j]
2 = 1 + 1
3 = 1 + 2 3 = 2 + 1
.... 以此类推
int main() {
int arr[5][5] = { 0 };
初始化
int i = 0;
int j = 0;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
if (j== 0) {
arr[i][j] =1;
}
if (i == j) {
arr[i][j] =1;
}
if (i > 1 && j > 0) {
arr[i][j] = arr[i - 1][j - 1] +arr[i - 1][j] ;
}
}
}
//
//循环输出
for (i = 0; i < 5; i++) {
for (j = 0; j <5; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
4、去零
只用遍历这个二维数组 非零的元素 控制内层循环 j<i 即可
完整代码:
int main() {
int arr[5][5] = { 0 };
// 初始化
int i = 0;
int j = 0;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
if (j== 0) {
arr[i][j] =1;
}
if (i == j) {
arr[i][j] =1;
}
if (i > 1 && j > 0) {
arr[i][j] = arr[i - 1][j - 1] +arr[i - 1][j] ;
}
}
}
for (i = 0; i < 5; i++) {
for (j = 0; j <= i; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}