太阳能板最大面积
标题:太阳能板最大面积 | 时间限制: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)); } }