開啟章節選單
10242 Fourth Point!!
題目連結
題目敘述
已知一個平行四邊形中兩條相鄰邊的端點座標,請找出第四個點的座標。
輸入格式
每一行包含八個浮點數,分別代表:
-
第一條邊的一個端點(x₁, y₁)
-
第一條邊的另一個端點(x₂, y₂)
-
第二條邊的一個端點(x₃, y₃)
-
第二條邊的另一個端點(x₄, y₄)
座標單位是公尺(meter),精確到最接近的毫米(0.001 m)」。 所有的座標值範圍在 -10,000 到 10,000 之間。 輸入直到檔案結束 EOF。
注意:輸入的四個點中,有兩個點是相同的即兩條相鄰邊的交點。
輸出格式
對於每一組輸入,輸出第四個點的(x, y)座標,單位是公尺,並且以小數點后三位輸出(即到最接近的毫米),座標之間以一個空格分隔。
解題思路
先找到重複的點(x, y),用(ansx, ansy)代表第四個點預設為(x, y),再加上剩餘兩點與 x, y 的差(xi - x, yi - y),最後用 fixed
、 setprecision(3)
輸出小數點後三位。
程式碼
#include<bits/stdc++.h> using namespace std; int main() { double x, y, c[4][2], ansx, ansy; while (cin >> c[0][0] >> c[0][1] >> c[1][0] >> c[1][1] >> c[2][0] >> c[2][1] >> c[3][0] >> c[3][1]) { for (int i = 0; i < 3; i++) { for (int j = i + 1; j <= 3; j++) { if (c[i][0] == c[j][0] && c[i][1] == c[j][1]) { x = c[i][0]; y = c[i][1]; } } } ansx = x; ansy = y; for (int i = 0; i < 4; i++){ if (c[i][0] != x || c[i][1] != y) { ansx += c[i][0] - x; ansy += c[i][1] - y; } } cout << fixed << setprecision(3) << ansx << " " << ansy << "\n"; } }