有如下三角形数字:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
每个数字只能向自己正下方和右下方走,求从顶端到底端最小数字之和。
输入格式:
输入有n+1行:
第一行为一个整数n;
下面n行为递增数据。
输出格式:
输出为一个整数,表示从顶端到底端的最小数字之和。
输入样例:
在这里给出一组输入。例如:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出样例:
在这里给出相应的输出。例如:
17
代码:
#include<stdio.h>
int n;//将n定义成全局变量
int main(){
scanf("%d",&n);//对n进行赋值
int i,j,a[n][n];//定义行列变量,和二维数组
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
scanf("%d",&a[i][j]);//对二维数组进行赋值
}
}
int z= fun(a,0,0);
printf("%d",z);//输出计算的值
return 0;
}
int fun(int t[][n],int i,int j){//计算路径上最小数
if(i==n){//当走到最底时结束
return t[i][j];//返回该值
}else{
int x=fun(t,i+1,j);//向下走
int y=fun(t,i+1,j+1);//向右下方走
return min(x,y)+t[i][j];//计算如何走时才最小
}
}
int min(int x,int y){//返回最小值
if(x>y){
return y;
}else{
return x;
}
}
DEVc++可运行,pta不行@