有一堵無限長的牆,你有一根長度為 L 的圍欄,圍欄兩端必須靠在牆上,中間可以任意形狀。求圍欄與牆圍成的**最大面積**。
輸入多組測試用例,每行一個整數 L (1 ≤ L ≤ 100),L=0 結束。輸出對應的最大面積。
設圍欄彎曲形成半圓,半徑為 r,則圍欄長度(半圓周長):
L = πr → r = L/π
半圓面積:
A = ½πr² = ½π(L/π)² = L²/(2π)
Area = L * L / (2 * π)
#include <cstdio>
#include <cmath>
int main() {
const double PI = acos(-1.0); // 高精度 π
int L;
while (scanf("%d", &L) == 1 && L != 0) {
double area = (double)L * L / (2.0 * PI);
printf("%.2f\n", area); // 保留兩位小數
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int L = sc.nextInt();
if (L == 0) break;
double area = (double) L * L / (2 * Math.PI);
System.out.printf("%.2f\n", area);
}
}
}
| 輸入 L | 計算過程 | 輸出面積 |
|---|---|---|
| 1 | 1²/(2π) ≈ 0.15915 | 0.16 |
| 100 | 10000/(2π) ≈ 1591.549 | 1591.55 |
與題目樣例輸出 0.16 和 1591.55 完全吻合(題目樣例輸出格式為連續輸出無換行,實際應每行一個)。
L²/(4π)本質是一道**等周問題**的變體,掌握「固定周長半圓面積最大」的幾何結論,即可 O(1) 解決。