1 条题解
-
0
C :
#include <stdio.h> #include <math.h> double getArea(int a, int b, int c) { int temp = a + b + c; double sum = temp; temp = a + b - c; if(temp <= 0) return 0; sum *= temp; temp = a + c - b; if(temp <= 0) return 0; sum *= temp; temp = b + c - a; if(temp <= 0) return 0; sum *= temp; return sqrt(sum) / 4; } int main() { int N; int *length; int i, j, z; double areaMax, temp; while(scanf("%d", &N) == 1) { areaMax = 0; length = (int*)malloc(sizeof(int) * N); for(i = 0; i < N; i++) scanf("%d", length+i); for(i = 0; i < N - 2; i++) { for(j = i + 1; j < N - 1; j++) { for(z = j + 1; z < N; z++) { temp = getArea(length[i], length[j], length[z]); if(temp > areaMax) areaMax = temp; } } } if(areaMax == 0) printf("no triangle\n"); else printf("%.2f\n", areaMax); } return 0; }
C++ :
#include <iostream> #include <cstdio> #include <vector> #include <algorithm> #include <cmath> #include <iomanip> using namespace std; double CalcArea(int a, int b, int c) { double area = -1; if ((a + b > c) && (a + c > b) && (b + c > a)) { double p = (a + b + c) / 2.0; area = p * (p - a) * (p - b)*(p - c); area = sqrt(area); } return area; } double Process(vector<int> &v) { if (v.size() <= 2) return -1; int a, b, c; double maxArea = -1, area; for (int i = 0; i < v.size() - 2; i++) { a = v[i]; for (int j = i + 1; j < v.size() - 1; j++) { b = v[j]; for (int k = j + 1; k < v.size(); k++) { c = v[k]; area = CalcArea(a, b, c); if (area == -1) break; if (area > maxArea) maxArea = area; } } } return maxArea; } int main() { int n, a; double area; vector<int> v; while (cin >> n) { v.clear(); v.reserve(n); while (n--) { cin >> a; v.push_back(a); sort(v.begin(), v.end());//按边长排序 } area = Process(v); if (area == -1) //cout << "no triangle" << endl; printf("no triangle\n"); else printf("%.2lf\n", area); //cout <<setiosflags(ios::fixed)<<setprecision(2) << area << endl; } return 0; }
Java :
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ int n = in.nextInt(); int[] match = new int[n]; for(int i = 0; i < n; i++){ match[i] = in.nextInt(); } boolean found = false; int i = 0; int k = 0; int l = 0; double p = 0; double result = 0; double area = 0; for(int a = 0; a < n - 2; a++){ for(int b = a + 1; b < n - 1; b++){ for(int c = b + 1; c < n; c++){ i = match[a]; k = match[b]; l = match[c]; if(!isTriangle(i, k, l)){ continue; } else{ found = true; p = (i + k + l) * 1.0 / 2; area = Math.sqrt(p * (p - i) * (p - k) * (p - l)); if(area > result) result = area; } } } } if(found) System.out.printf("%.2f\n", result); else System.out.println("no triangle"); } } public static boolean isTriangle(double a, double b, double c){ if(a + b > c && a + c > b && b + c > a) return true; else return false; } }
- 1
信息
- ID
- 3379
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者