題目敘述
題目會給我們一張資料表Triangle。
裡面分別有x、 y、z等欄位,分別代表三個邊長。其中(x、 y、z)做為複合主鍵Primary key
要求我們判斷,每條data row裡面的x, y, z 能否構成一個合法的三角形?如果可以,返回字串"Yes";如果不行,返回字串"No"
輸出的順序不拘。
Table: Triangle
+-------------+------+
| Column Name | Type |
+-------------+------+
| x | int |
| y | int |
| z | int |
+-------------+------+
In SQL, (x, y, z) is the primary key column for this table.
Each row of this table contains the lengths of three line segments.
測試範例
Example 1:
Input:
Triangle table:
+----+----+----+
| x | y | z |
+----+----+----+
| 13 | 15 | 30 |
| 10 | 20 | 15 |
+----+----+----+
Output:
+----+----+----+----------+
| x | y | z | triangle |
+----+----+----+----------+
| 13 | 15 | 30 | No |
| 10 | 20 | 15 | Yes |
+----+----+----+----------+
演算法
主要有兩個考察點。
- 聯想到用三角不等式: 兩邊相加大於第三邊 來判斷合法的三角形。
- 想到SQL中的 IF( ...condition, return value on True, return value on False)來輸出答案。
第一個就是以前學過的三角不等式,三角形的任兩邊相加一定大於第三邊。

image.png
x + y > z,
y + z > x,
x + z > y
對於合法三角形來說,恆成立
第二個考察點,聯想到可以使用IF( 布林條件判斷式, True的返回值, False的返回值)來輸出答案。
IF(x + y > z AND y + z > x AND x + z > y, "Yes", "No") AS triangle
程式碼
SELECT *, IF(x + y > z AND y + z > x AND x + z > y, "Yes", "No") AS triangle
FROM Triangle;
關鍵知識點
- 聯想到用三角不等式: 兩邊相加大於第三邊 來判斷合法的三角形。
- 想到SQL中的 IF( ...condition, return value on True, return value on False)來輸出答案。
Reference: