请问如何用数组解决杨辉三角形有关的问题(定义、计算)
比如以下实例:
首先,提示用户:“您想计算杨辉三角形的行数(1~20):”,并将用户输入的数值存放到变量n中。
然后,判断用户输入数据是否正确,如果不正确则输出错误信息并终止程序运行。
最后,计算并输出指定行数的杨辉三角形,每个数值输出域宽为6,左对齐。
#include <stdio.h>
int main() {
int n, i, j;
int arr[20][20] = {0};
printf("您想计算杨辉三角形的行数(1~20):");
scanf("%d", &n);
if (n < 1 || n > 20) {
printf("错误:行数范围应在1~20之间!");
return 0;
}
// 初始化第一列为1
for (i = 0; i < n; i++) {
arr[i][0] = 1;
}
// 计算其他行和列
for (i = 1; i < n; i++) {
for (j = 1; j <= i; j++) {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
// 输出杨辉三角形
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
printf("%-6d", arr[i][j]);
}
printf("\n");
}
return 0;
}
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
下面是使用数组计算并输出杨辉三角形的 C 语言代码:
#include <stdio.h>
#define MAX_ROW 20 // 定义杨辉三角形的最大行数
int main() {
int n, i, j;
int triangle[MAX_ROW][MAX_ROW]; // 定义二维数组存储杨辉三角形
printf("请输入要计算的杨辉三角形的行数(1~20):");
scanf("%d", &n);
// 判断用户输入是否合法
if (n < 1 || n > MAX_ROW) {
printf("输入的行数无效,请输入1~20之间的整数。\n");
return 0;
}
// 初始化第一行和对角线上的元素
for (i = 0; i < n; i++) {
triangle[i][0] = 1; // 每行第一个元素为1
triangle[i][i] = 1; // 每行最后一个元素为1
}
// 计算三角形中间的元素
for (i = 2; i < n; i++) {
for (j = 1; j < i; j++) {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
}
// 输出杨辉三角形
printf("杨辉三角形如下:\n");
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
printf("%-6d", triangle[i][j]); // 输出域宽为6,左对齐
}
printf("\n");
}
return 0;
}
在上述代码中,我们首先定义了一个二维数组 triangle
来存储杨辉三角形。然后使用 scanf
函数从用户输入中读取行数 n
。接着,我们对用户输入进行判断,如果不合法则输出错误信息并终止程序运行。然后,我们对第一行和对角线上的元素进行初始化,即每行第一个和最后一个元素为1。接着,我们计算三角形中间的元素,即使用上一行的元素相加得到当前行的元素。最后,我们输出杨辉三角形,每个数值输出域宽为6,左对齐。
需要注意的是,由于杨辉三角形的行数最多为20,因此我们在代码中使用了 #define
指令来定义了最大行数为20。如果需要计算更大的杨辉三角形,可以将该值设为更大的数。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢