同題:UVa 11936 – The Lazy Lumberjacks
從前從前,在一個遙遠的森林裡,有一群懶惰的伐木工人。由於他們懶得砍樹,所以他們總是想辦法混水摸魚。他們的工頭,總是想盡辦法試圖讓他們認真工作。
經過許多的討論後,工頭和伐木工人達成協議,工人表示他們可以工作,但前提是分配給每個人的工作樹林為三角形。如果是其他形狀,他們將罷工。
由於伐木工人很懶惰也很狡猾,所以他們說服工頭讓他們確定他們要工作的樹林邊長和位置。
結果,伐木工人不斷傳遞無法構成三角形樹林的邊長,來偷懶休息。
一段時間後,工頭才察覺有異,並決定寫一個程式來驗證每個伐木工人的輸入。
現在,當伐木工人傳遞錯誤的數字時,他們將被罰款1000美元(超過一天的工資)。
你的工作是寫一個程式,幫助工頭。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入第一行有一個整數 N (2 <= N <= 20),代表測資數量。 接下來 N 行,每行有三個整數表示伐木工人給的樹林邊長。 | 對於每組測資 如果樹林邊長可構成三角形 輸出「OK」 否則 輸出「Wrong!!」 |
6 1 2 3 3 2 5 3 4 5 6 6 1 3 3 3 7 3 10 | Wrong!! Wrong!! OK OK OK Wrong!! |
解題思路
任意兩邊長的和要大於第三邊才能是三角形,可以將三個數字排序過後將最小的兩個數字加起來看是否大於最大邊長,這樣就不需要每種組合都要判斷。
範例程式碼-ZeroJudge E614: The Lazy Lumberjacks
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for (int i = 0; i<N; i++)
{
vector<int>num;
for (int j = 0; j<3; j++)
{
int tmp;
cin >> tmp;
num.push_back(tmp);
}
sort(num.begin(), num.end());
if (num[0] + num[1] > num[2]) cout << "OK\n";
else cout << "Wrong!!\n";
}
}
//ZeroJudge E614
//Dr. SeanXD