import java.util.Scanner;
/**
声明:内容为开快车的小吕(本账户)原创
*题目来自CSDN博主「自由的小白」的原创文章第4题, 原文链接:https://blog.csdn.net/zzzzlei123123123/article/details/79598774
* 给你一个数n,然后使其成为一个n层的金字塔,其中金字塔上面一个数字比它下面两个数字小。
* 你的任务就是从最上面开始往下走,只能向下走相邻的两个数字,从第一层走到最下面一层,求出其最大值
* (金字塔的数据结构你要自己建,老师过来给你数据,你再在控制台上输)。 金子塔样子:
3
4 5
4 6 6
7 12 13 8
* @author
* @date 2021/3/1 21:19
* 我的思想就是构建一个类似与树的一个数组---[i+1][j]与[i+1][j+1]来满足题目要求
* 3
4 5
4 6 6
7 12 13 8
*/
public class Tree {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int[][] a=new int[10][10];
int hight,max;
System.out.println("请输入高度");
hight=scanner.nextInt();
for(int i=0;i<hight;i++)
for(int j=0;j<=i;j++){
a[i][j]=scanner.nextInt();
}
max=again(0,0,0,a,hight);
System.out.println(max);
}
/**
*
* @param i 数组的行标
* @param j 数组的列标
* @param max 最大值
* @param a 传递数组地址
* @param hight 数组高度 n X n
* @return
*/
public static int again(int i,int j,int max,int a[][],int hight){
if(a[i+1][j]>a[i+1][j+1]&&i+1<hight){
max=a[i+1][j];
return again(i+1,j,max,a,hight);
}
else if(a[i+1][j]<a[i+1][j+1]&&i+1<hight){
max=a[i+1][j+1];
return again(i+1,j+1,max,a,hight);
}
//若存在一个相等的数时(因为左右没有要求那一边大可能相等时导致错过另一边的最大值,例如将上式右下角8改成20)
else if (a[i+1][j]==a[i+1][j+1]&&i+1<hight)
// 3目运算符 ? :
return again(i+1,j,max,a,hight)>again(i+1,j+1,max,a,hight)?again(i+1,j,max,a,hight):again(i+1,j+1,max,a,hight);
else
return max;
}
}
java上机程序设计
最新推荐文章于 2021-04-23 20:58:27 发布