C语言蓝桥杯数字三角形
时间: 2023-09-21 16:12:51 浏览: 134
题目描述
下面的数字金字塔由数字0~9构成。
0
1 2 1
2 3 4 3 2
3 4 5 6 5 4 3
4 5 6 7 8 7 6 5 4
其中第k行包含k个数字,数字之间用空格分隔。
如图所示的数字金字塔有5行,它的高度为5。
请编写一个程序,计算出从金字塔顶至底部的所有路径中,数字之和最大的那条路径所经过的数字之和。
【输入格式】
第一行是一个整数n,表示数字金字塔的高度。
接下来n行,按照数字金字塔的格式,输入数字金字塔中的数字0~9。
【输出格式】
输出一个整数,表示从金字塔顶至底部的所有路径中,数字之和最大的那条路径所经过的数字之和。
【输入样例】
5
0
1 2
2 3 4
3 4 5 6
4 5 6 7 8
【输出样例】
27
【样例说明】
从顶至底部有以下几条路径:
0->1->2->3->4,路径上数字之和为0+1+2+3+4=10;
0->1->3->5->7,路径上数字之和为0+1+3+5+7=16;
0->1->3->5->8,路径上数字之和为0+1+3+5+8=17;
0->1->3->6->8,路径上数字之和为0+1+3+6+8=18;
0->2->4->5->7,路径上数字之和为0+2+4+5+7=18;
0->2->4->5->8,路径上数字之和为0+2+4+5+8=19;
0->2->4->6->8,路径上数字之和为0+2+4+6+8=20;
其中,数字之和最大的是最后一条,其和为27。
相关问题
C语言蓝桥杯算法
### C语言蓝桥杯算法题目及其解题思路
#### 1. Fibonacci 数列
Fibonacci 数列是一个经典的递归问题,可以通过简单的迭代方法实现。其核心思想是从第3项开始,每一项等于前两项之和[^1]。
```c
int fib(int n) {
if (n <= 1) return n;
int a = 0, b = 1, c = 0;
for (int i = 2; i <= n; ++i) {
c = a + b;
a = b;
b = c;
}
return b;
}
```
#### 2. 判断闰年
判断某一年是否为闰年的逻辑是基于公历年份能被4整除但不能被100整除,或者能被400整除的规则[^1]。
```c
bool isLeapYear(int year) {
return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
}
```
#### 3. 杨辉三角形
杨辉三角形的核心在于利用组合数公式计算每行的数值。通过动态规划的方式可以有效减少重复计算[^1]。
```c
void yangHuiTriangle(int n) {
int triangle[100][100];
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i) {
triangle[i][j] = 1;
} else {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
printf("%d ", triangle[i][j]);
}
printf("\n");
}
}
```
#### 4. 数字三角形最大路径和
此问题是典型的动态规划应用案例之一。从下往上逐层累加最优子结构的结果,最终得到全局最优解[^2]。
```c
#include <stdio.h>
#define MAX(a,b) (((a)>(b))?(a):(b))
int main() {
int N;
scanf("%d", &N);
int tri[N][N], dp[N][N];
for (int i = 0; i < N; ++i)
for (int j = 0; j <= i; ++j)
scanf("%d", &tri[i][j]);
for (int i = 0; i < N; ++i)
dp[N-1][i] = tri[N-1][i];
for (int i = N - 2; i >= 0; --i)
for (int j = 0; j <= i; ++j)
dp[i][j] = tri[i][j] + MAX(dp[i+1][j], dp[i+1][j+1]);
printf("%d\n", dp[0][0]);
return 0;
}
```
---
#### 相关问题
蓝桥杯杨辉三角形c语言
蓝桥杯是中国最大的IT竞赛之一,每年都会吸引大量的学生参与。杨辉三角形是蓝桥杯中常见的题目之一,它是一个由数字构成的三角形,满足以下规律:
1. 第一行只有一个数字1。
2. 第二行有两个数字1。
3. 从第三行开始,每个数字都是它上方两个数字之和。
下面是一个用C语言实现杨辉三角形的示例代码:
```c
#include <stdio.h>
int main() {
int rows, coef = 1;
printf("请输入要打印的行数:");
scanf("%d", &rows);
for (int i = 0; i < rows; i++) {
for (int space = 1; space <= rows - i; space++) {
printf(" ");
}
for (int j = 0; j <= i; j++) {
if (j == 0 || i == 0) {
coef = 1;
} else {
coef = coef * (i - j + 1) / j;
}
printf("%4d", coef);
}
printf("\n");
}
return 0;
}
```
这段代码首先会让用户输入要打印的行数,然后使用两个嵌套的循环来打印杨辉三角形。外层循环控制行数,内层循环用来打印每一行的数字。在内层循环中,使用了组合公式来计算每个数字的值。
阅读全文
相关推荐












