【问题描述】
生成一个非空int类型的单链表,其中可能出现值域重复的结点,设计算法查找单链表中的最后一个最小结点,并返回打印该结点的逻辑序号。
【输入形式】
依次输入单链表的结点个数及数据元素
【输出形式】
输出单链表中的最后一个最小结点的逻辑序号
【样例输入】
4
1 2 1 1
【样例输出】
4
题目:
问题:
给定一个由n行数字组成的数字三角形,如下图所示:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大(每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数)。
输入:
第一行是数字三角形的行数,接下来 n 行是数字三角形中的数字。
比如:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出:
输出这个最大值。
这里只给出代码,步骤分析看链接:步骤详解
代码实现:
代码注释的部分构成方法二
#include<stdio.h>
#include<math.h>
#include <windows.h>
#define N 5
int a[6][6];
int sum[6][6];
int sum_two[6];
int main()
{
int i,j;
for (i=1;i<=5;i++)
for (j=1;j<=i;j++)
scanf("%d",&a[i][j]);
for (i=1;i<6;i++)
{
sum[5][i] = a[5][i];
// sum_two[i] = a[5][i];
}
for (i=5-1;i>=1;i--)
for (j=1;j<=i;j++)
{
sum[i][j] = max(sum[i+1][j],sum[i+1][j+1]) + a[i][j];
//sum_two[j] = a[i][j] + max(sum_two[j],sum_two[j+1]);
}
for (i=1;i<6;i++)
{
for (j=1;j<=i;j++)
printf("%3d",sum[i][j]);
printf("\n");
}
//printf("%d",sum_two[1]);
return 0;
}