UVA10678:The Grazing cow [JAVA]

Online Judge

Loader Loading…
EAD Logo Taking too long?

Reload Reload document
| Open Open in new tab

Download [24.42 KB]

題目概要

  • 一頭牛在田野裡吃草,田野裡有一根繩子用兩根柱子繫著, 牛被的鼻子被繩子穿過,我們需要計算出牛可以吃草的區域範圍大小。
  • 輸入 N 筆測資。
  • 接著輸入 D, L。
    • D 表示兩根柱子之間的距離 (0 ≤ D ≤ 1000)
    • L 為繩索長度 (D < L ≤ 1500)
  • 請使用雙精度浮點數據類型進行浮點計算(double)。
  • 需輸出到小數點後三位

解題技巧

  • 橢圓的概念解題,焦點為牛的鼻子,橢圓面積公式 PI * a * b
  • c = D/2, a = L/2,根據畢氏定理換算 b^2 = a^2 - c^2 開根號拿到 b,如此一來我們就能獲取到 a, b, c 的長度。
  • 再以橢圓面積公式 PI * a * b 計算出牛的吃草面積。
  • PI 可用 Math.PI 獲取:final double PI = Math.PI; // Math.PI 也可以寫成 acos(-1);

以第一筆測資為例,兩根柱子距離 10 英尺(D),12 英尺的繩子(L),計算出 c = 5, a = 6, b = 根號11,3.14 * 6 * 根號11 => 3.3166247 * 3.1415926 * 6 取小數點後三位則四捨五入為 62.517

程式碼

import java.util.*;
import static java.lang.System.*;
public class Uva10678 {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int cases = sc.nextInt();
    while(cases-- > 0) {
    	final double PI = Math.PI;
    	int D = sc.nextInt(), L = sc.nextInt(); // D:柱子距離, L:繩子長度

    	double a = L/2.0, c = D/2.0; // 以雙精度浮點數計算
    	double b = Math.sqrt(Math.pow(a,2) - Math.pow(c,2)); // b^2 = a^2 - c^2

    	double result = PI * a * b; // 橢圓面積

    	System.out.printf("%.3f", result); // 取小數點後三位
    	System.out.println("");
    }
  }
};
0 0 評分數
Article Rating
訂閱
通知
guest

0 Comments
在線反饋
查看所有評論