太阳能板最大面积
标题:太阳能板最大面积 | 时间限制:1秒 | 内存限制:32768K | 语言限制:不限
给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需要先安装两个支柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。但航天器不同位置的支柱长度不同,太阳能板的安装面积受限于最短一侧的那根支柱长度。如图:
let line;
while(line=readline()){
let lines = line.split(" ");
let list = lines[0].split(',');
let maxAera=0;
let List1 = [];
let List2=[];
for (let i = 0; i < list.length; i++) {
for (let j = i; j < list.length; j++) {
let minArea = parseInt(list[i]) > parseInt(list[j])?list[j]:list[i];
let Area = parseInt(minArea) * (j - i);
maxAera = Math.max(Area,maxAera);
}
}
console.log(maxAera);
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#define MIN(a,b) (a>b)?(b):(a)
int account(vector<long> &input){
int length = input.size();
long long max = 0;
for(int i = 0; i != length; i++){
for(int j = i + 1; j != length; j++){
int min_val = MIN(input[i],input[j]);
long tmp = min_val*(j-i);
if(tmp > max){
max = tmp;
}
}
}
return max;
}
int main(int argc, char** argv){
string input;
while(cin >> input){
int length = input.length();
int index = input.npos;
bool is_last_sym = false;
vector<long> m_data;
for(int m = 0; m != length; m++){
char tmp = input[m];
if(tmp == ','){
if(is_last_sym){
continue;
}
if(index != input.npos){
m_data.push_back(atol(input.substr(index, m - index).c_str()));
} else {
is_last_sym = true;
continue;
}
/*if(m != length - 1){
index = m + 1;
} else {
index = input.npos;
}*/
index = input.npos;
is_last_sym = true;
} else {
if(index == input.npos){
index = m;
is_last_sym = false;
}
}
}
if(index != input.npos){
m_data.push_back(atol(input.substr(index).c_str()));
index = input.npos;
}
cout << account(m_data) << endl;
}
} // manfen
import java.util.*;
public class Main{
/**
* 将字符串解析成int数组
*/
private static int[] toArray(String input) {
if (input==null || input.length()<=0) {
return new int[0];
}
// 分割字符串
String[] arr = input.split(",");
// 转成整形数组
int[] result = new int[arr.length];
for(int i=0;i<arr.length;++i) {
result[i] = Integer.valueOf(arr[i]);
}
return result;
}
/**
* 核心逻辑,计算最大面积
* 可以考虑简化计算(假设选中的左、右柱子分别为i,j;那么如果左边有柱子比i处还高,那肯定有更大的面积,右侧同理);时间问题,暂不优化代码
*/
private static int getMaxArea(String str) {
int[] heights = toArray(str);
int result = 0;
// 暴力解法,时间复杂度~O(n*(n-1))
for (int i=0;i<heights.length-1;++i) {
for (int j=i+1;j<heights.length;++j) {
// 计算面积
int len = Math.min(heights[i], heights[j]);
int area = len * (j-i);
// 记录最大值
result = Math.max(result, area);
}
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
System.out.println(getMaxArea(input));
}
}

