您当前的位置:首页 > 百宝箱

数字三角形用C语言编程怎么写

2024-09-30 21:06:18 作者:石家庄人才网

石家庄人才网今天给大家分享《数字三角形用C语言编程怎么写》,石家庄人才网小编对内容进行了深度展开编辑,希望通过本文能为您带来解惑。

数字三角形问题是算法设计中一个经典的动态规划问题,它的描述如下:有一个由数字组成的三角形,从三角形的顶部出发,每次可以向左下方或右下方移动一步,直到到达三角形的底部。求从顶部到底部的路径上经过的数字之和的最大值。

这个问题可以使用动态规划的思想来解决。我们可以用一个二维数组dp来存储从顶部到每个位置的最大路径和,其中dp[i][j]表示从顶部到第i行第j列位置的最大路径和。那么,我们可以得到如下的状态转移方程:

dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]

其中,triangle[i][j]表示三角形中第i行第j列的数字。边界条件是dp[0][0] = triangle[0][0]。

根据状态转移方程,我们可以使用C语言编写代码来解决数字三角形问题:

#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 100int max(int a, int b) {    return a > b ? a : b;}int main() {    int n, i, j;    int triangle[MAX_SIZE][MAX_SIZE];    int dp[MAX_SIZE][MAX_SIZE];    // 输入三角形的行数    printf("请输入三角形的行数:");    scanf("%d", &n);    // 输入三角形的数字    printf("请输入三角形的数字:\n");    for (i = 0; i < n; i++) {        for (j = 0; j <= i; j++) {            scanf("%d", &triangle[i][j]);        }    }        // 初始化dp数组    dp[0][0] = triangle[0][0];    // 计算从顶部到每个位置的最大路径和    for (i = 1; i < n; i++) {        for (j = 0; j <= i; j++) {            if (j == 0) {                dp[i][j] = dp[i-1][j] + triangle[i][j];            } else if (j == i) {                dp[i][j] = dp[i-1][j-1] + triangle[i][j];            } else {                dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];            }        }    }    // 找到最后一行中最大路径和    int max_sum = dp[n-1][0];    for (j = 1; j < n; j++) {        if (dp[n-1][j] > max_sum) {            max_sum = dp[n-1][j];        }    }    // 输出最大路径和    printf("最大路径和为:%d\n", max_sum);    return 0;}

在这段代码中,我们首先定义了一个max函数来返回两个数中较大的一个。然后,我们定义了两个二维数组triangle和dp,分别用于存储三角形的数字和从顶部到每个位置的最大路径和。接下来,我们输入三角形的行数和数字,并初始化dp数组。

然后,我们使用两层循环来计算从顶部到每个位置的最大路径和。在循环中,我们使用状态转移方程来计算dp[i][

版权声明:《数字三角形用C语言编程怎么写》来自【石家庄人才网】收集整理于网络,不代表本站立场,所有图片文章版权属于原作者,如有侵略,联系删除。
https://www.ymil.cn/baibaoxiang/2068.html