39. Fourth Point!! (CPE10566, UVA10242) - CPE一顆星解答與說明
CPE一顆星49題解答 - pdf 電子檔,售價 199 元,
購買電子檔可將筆記與完整解答帶著走,
坐車、上課時皆可隨時複習,
不受網路或廣告影響,
若有需要請來信購買 greens2314@gmail.com
題目
- 題目會給平行四邊形中兩個相鄰邊的端點,找出第四點的座標
輸入說明
- 測試資料有多筆
- 每一筆包含 8 個浮點數
- 第 1 個數字與第 2 個數字是第一個邊的某一端點的 (x, y) 座標
- 第 3 個數字與第 4 個數字是第一個邊的某一端點的 (x, y) 座標
- 第 5 個數字與第 6 個數字是第二個邊的某一端點的 (x, y) 座標
- 第 7 個數字與第 8 個數字是第二個邊的某一端點的 (x, y) 座標
輸出說明
- 依每筆測試資料,印出第四個座標
- x 座標與 y 座標間隔一個空白
- 座標單位為公尺,精確值到毫米(也就是小數點後三位)
解題技巧
- 平行四邊形特性
- 兩對角線互相平分
- 下圖 E 點
- E = A + C / 2 = B + D / 2
- https://zh.wikipedia.org/wiki/%E5%90%91%E9%87%8F
- 題目求 C 點,可由上述公式簡化推得
- A + C = B + D
- C = B + D – A ,例如 C (1, 0) = ( 1 + 0 - 0 , 1 + 0 - 1)
- A 點就是題目中相鄰兩邊重疊(或重複)的那一點
- B 與 D 點就是相鄰兩邊的末端座標
- 找出重複的點與非重複的點帶入公式求解
解題過程
取得輸入
- 使用 while 偵測是否有浮點數輸入
- 題目會給 4 個座標,使用 for 迴圈逐一取得
- 使用 Point2D 類別儲存 (x, y) 座標
- https://docs.oracle.com/javase/7/docs/api/java/awt/geom/Point2D.html
- 記得 import java.awt.geom.* 或 java.awt.geom.Point2D
- 建立實體 new Point2D.Double(0, 0)
將相鄰兩邊的末端座標存起來
- 宣告 ArrayList 將座標存起來
- 呼叫 ArrayList 提供的 contains() 方法,判斷特定座標是否存在串列中
- 若不存在,則將座標加入串列,呼叫 add() 方法
- 若存在,則將串列中的此座標移除,呼叫 remove() 方法,
- 此座標是相鄰兩邊中間重複的那一點,圖示中的 A 點
- 此座標移除後,串列中就只剩下 B 點與 D 點
儲存相鄰兩邊中間重複的點
- 宣告用來儲存重複座標的變數
- 兩個寫法都可以
- new Point2D.Double(0, 0);
- new Point2D.Double();
- 若特定座標存在串列中時,將重覆座標更新為特定座標,也就是圖示中的 A 點
印出
- 平行四點形中的第四點座標的 x 值與 y 值
- 數值到小數點第 3 位
- 使用 printf 方法
- System.out.printf("%.3f %.3f" , 變數1, 變數2)
- 換行
- /r/n
- %n
- System.out.println();
- 數值中間要用空白隔開
- 每一筆輸出要換行
留言
張貼留言