添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

问题描述:
给定一个由n行数字组成的数字三角形如下图所示。(第n行有n个数字)试设计一个算法,计算出从三角形的顶至底的一条路径,
使该路径经过的数字总和最大。对于给定的由n行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。
1
2 3
4 5 6
7 8 9 10

数据输入:
输入的第1行是数字三角形的行数n,1≤n≤100。接下来n行是数字三角形各行中的数字。所有数字在0..99之间,第n行有n个数字。

数据输出:
输出的第1行中的数是计算出的最大值。
输入示例:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出示例:
30

//三角路径求最大值
/#define MAXN 100
/#define LOCAL
int a[MAXN][MAXN];
int b[MAXN][MAXN];
void lujing(){
    //如果定义了LOCAL就执行文件重定向
    #ifdef LOCAL
        freopen("data.in","r",stdin);
        freopen("data.out","w",stdout);
    #endif
    int n,i,j;
    scanf("%d",&n);//输入行数
    for(i= 0 ;i<n;i++){
        for(j = 0;j<=i;j++){
            scanf("%d",&(a[i][j]));//读取数据到a数组中
            b[i][j] =   a[i][j];//同时复制给b,这样b也有这样的结构。
        /*这儿举个例子:a:    1             b  1
                               2  3             2  3
                               4  5  6          4  5  6
            a,b一模一样,就像这样。
下面这个思路就是,a中的2加上b中的4,和b中的5比较大小,大的直接代替b中的2
            于是b就是这样的了:
                        b:    1        
                               4  5  6
然后j+1,就是a中的3加上b中的5,和b中的6比较大小,大的直接代替b中的3
                        b:    1        
                               4  5  6
i--,往上一层。a中的1分别加上b中的7,和9。大的直接代替b中的1,最后b就变成了:
                        b:    10        
                               4  5  6
            最大结果就是10
    for(i= n-1 ;i>0;i--){
        for(j = 0;j<i;j++){
            if( (b[i][j]+a[i-1][j])>(b[i][j+1]+a[i-1][j]) ) {
                b[i-1][j] = b[i][j]+a[i-1][j];
            else b[i-1][j] = b[i][j+1]+a[i-1][j];
    printf("%d\n",b[0][0]);
                    问题描述:  给定一个由n行数字组成的数字三角形如下图所示。(第n行有n个数字)试设计一个算法,计算出从三角形的顶至底的一条路径, 使该路径经过的数字总和最大。对于给定的由n行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。             1            2  3           4  5  6 7  8  9  10数据输入: 输入的
给定一个由n数字组成数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 
编程任务:对于给定的由n 数字组成数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。
Input 
输入数据是由多组测试数据组成。第1 数字三角形数n,1≤n≤100。接下来n数字三角形中的数字。所有数字在0至99之间。
Output 
对应每组测试数据,每输出的是计算出的最大值。
Sample Input 
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output 
思路是:1、初始化a[i][j]当i==j时为1,当j=0时为1。2、通过以下语句来填充杨辉三角(杨辉三角中,第i第j个的值等于第i-1第j-1个数和等于第i-1第j个数之和)
3、输出结果。注:为了使结果严格输出,在输出时使用判断来防止每最后带有空格。在看过其他大佬写的代码后,了解到思路1中的代码可以通过"||"或运算来缩减长度
在经过第一次修改后,似乎也可以将思路1和2通过判断结合起
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。
      3   8
    8   1   0
  2   7   4   4
4   5   2   6   5
第一包含整数n,表示数字三角形的层数。
接下来n,每包含若干整数,其中第 i 表示数字三角形第 i 层包含的整数。
输出一个整数,表示最大的路径数字和。
				
三角形的顶部到底部有很多条不同的路径。 对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。 【输入格式】 输入的第一包含一个整数 N (1 < N ≤ 100),表示三角形数。下面的 N 给出数字三角形数字三角形上的数都是0 至 100 之间的整数。 【输出格式】 输出一个整数,表示答案。 【样例输入】 8 1 0
均采用C++通过。 1、三位数,水仙花数 abc=a^3+b^3+c^3void daffodils(){int i,x = 100,copy,a; //scanf("%d",&x);while(x <1000){ copy = x; int sum =0; for(i=0;i<3;i++){ if(i) copy = copy / 10;
问题描述:给定一个有n数字组成数字三角形。试设计一个算法,计算出从三角形的顶部到底部的最短路径和。 解答:我们可以使用动态规划来解决这个问题。定义一个二维数组dp,其中dp[i][j]表示从三角形的第i第j列的数字出发到三角形底部的最短路径和。 首先,我们可以初始化dp数组的最后一,即dp[n-1][j] = nums[n-1][j],其中nums表示给定的数字三角形。这是因为三角形的最后一到底部的最短路径和就是它们自身。 然后,我们从倒数第二开始逐计算dp数组。对于每个位置(i,j),dp[i][j] = nums[i][j] + min(dp[i+1][j], dp[i+1][j+1]),即当前位置的最短路径和等于当前位置的数字加上下一相邻两个位置中最小的路径和。 最后,dp[0][0]就是我们所求的从三角形顶部到底部的最短路径和。 下面是算法的伪代码表示: 1. 初始化dp[n-1][j] = nums[n-1][j],其中n为三角形数。 2. 从倒数第二开始逐计算dp数组: - for i = n-2 to 0: - for j = 0 to i+1: - dp[i][j] = nums[i][j] + min(dp[i+1][j], dp[i+1][j+1]) 3. 返回dp[0][0]作为结果。 该算法的时间复杂度为O(n^2),其中n为三角形数。