题目描述
给航天器一侧加装长方形和正方形的太阳能板(图中的斜线区域)
需要先安装两个支柱(图中的黑色竖条)
再在支柱的中间部分固定太阳能板
但航天器不同位置的支柱长度不同
太阳能板的安装面积受限于最短一侧的那支支柱的长度
现提供一组整型数组的支柱高度数据
假设每个支柱间的距离相等为一个单位长度
计算如何选择两根支柱可以使太阳能板的面积最大
输入描述
10,9,8,7,6,5,4,3,2,1
注释,支柱至少有两根,最多10000根,能支持的高度范围1~10^9的整数
柱子的高度是无序的
例子中的递减是巧合
输出描述
可以支持的最大太阳板面积:(10m高支柱和5m高支柱之间)
25
示例1
输入
10,9,8,7,6,5,4,3,2,1
输出
25
备注 10米高支柱和5米高支柱之间宽度为5,高度取小的支柱高度也是5
面积为25
任取其他两根支柱所能获得的面积都小于25 所以最大面积为25。
思路分析
- 10米高支柱和5米高支柱之间宽度为5,柱子的高度是无序的,所以宽等于高支柱的高减去低支柱的高。
- 高度取小的支柱高度。
- 任取其他两根支柱所能获得的面积,取其中最大的。
参考代码
注:题目网上找的,参考代码是练习用,仅供参考,并不保证用例通过率。
import java.util.Scanner;/*** 航天器可以支持的最大太阳板面积*/
public class Test13 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String[] highsStr = scanner.nextLine().split(",");int highLen = highsStr.length;long[] highs = new long[highLen];for (int i = 0; i < highLen; i++) {highs[i] = Long.parseLong(highsStr[i]);}long res = 0, p1, p2, high, width;for (int i = 0; i < highLen; i++) {for (int j = 0; j < highLen; j++) {p1 = highs[i];p2 = highs[j];// 高 = 短柱子的高high = Math.min(highs[i], highs[j]);// 宽 = 高柱子的高 - 短柱子的高width = Math.abs(p1 - p2);res = Math.max(res, high * width);}}System.out.println(res);}
}