此題在高中生程式解題系統的題號為:c294: APCS-2016-1029-1三角形辨別。
筆者的解法:
1. 以整數陣列 n[3] 讀取三個整數。
2. 再用排序(sort)將整數陣列由小到大做排序,分別指定 a = n[0],b = n[1],c = n[2],此時 c 為最大值。
3. 之後用 if / else if / else 來做底下的判斷:
- 若 a+b ≦ c 時,輸出「No」;
- 若 a×a+b×b < c×c 時,輸出「Obtuse」;
- 若 a×a+b×b = c×c 時,時輸出「Right」;
- 若 a×a+b×b > c×c 時,輸出「Acute」。
C++ 程式碼:
C 程式碼:
Python 程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <iostream> #include <algorithm> using namespace std; int main(void) { int n[3]; // 以整數陣列 n[3] 讀取三個整數。 while(cin >> n[0] >> n[1] >> n[2]) { // 用排序(sort)將整數陣列由小到大做排序 sort(n, n + 3); // 分別指定 a = n[0],b = n[1],c = n[2],此時 c 為最大值 int a = n[0], b = n[1], c = n[2]; int l = a * a + b * b, r = c * c; // 由大到小輸出 cout << a << " " << b << " " << c << endl; /* 做底下的判斷: 若 a+b ≦ c 時,輸出「No」; 若 a×a+b×b < c×c 時,輸出「Obtuse」; 若 a×a+b×b = c×c 時,時輸出「Right」; 若 a×a+b×b > c×c 時,輸出「Acute」。 */ if(a + b <= c) { cout << "No" << endl; } else if(l < r) { cout << "Obtuse" << endl; } else if(l == r) { cout << "Right" << endl; } else if(l > r) { cout << "Acute" << endl; } } return 0; } |
C 程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <stdio.h> #include <stdlib.h> int cmp(const void *a,const void *b) { return ( *(int*)a - *(int*)b ); } int main(void) { int n[3]; // 以整數陣列 n[3] 讀取三個整數。 while(scanf("%d%d%d", &n[0], &n[1], &n[2]) == 3) { // 用排序(sort)將整數陣列由小到大做排序 qsort(n, 3, sizeof(int), cmp); // 分別指定 a = n[0],b = n[1],c = n[2],此時 c 為最大值 int a = n[0], b = n[1], c = n[2]; int l = a * a + b * b, r = c * c; // 由大到小輸出 printf("%d %d %d\n", a, b, c); /* 做底下的判斷: 若 a+b ≦ c 時,輸出「No」; 若 a×a+b×b < c×c 時,輸出「Obtuse」; 若 a×a+b×b = c×c 時,時輸出「Right」; 若 a×a+b×b > c×c 時,輸出「Acute」。 */ if(a + b <= c) { printf("No\n"); } else if(l < r) { printf("Obtuse\n"); } else if(l == r) { printf("Right\n"); } else if(l > r) { printf("Acute\n"); } } return 0; } |
Python 程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import sys for num in sys.stdin: # 以整數串列 n[3] 讀取三個整數。 n = list(map(int, num.split())) # 用排序(sort)將整數陣列由小到大做排序 n.sort() # 分別指定 a = n[0],b = n[1],c = n[2],此時 c 為最大值 a = n[0] b = n[1] c = n[2] l = a * a + b * b r = c * c # 由大到小輸出 print(a, b, c) ''' 做底下的判斷: 若 a+b ≦ c 時,輸出「No」; 若 a×a+b×b < c×c 時,輸出「Obtuse」; 若 a×a+b×b = c×c 時,時輸出「Right」; 若 a×a+b×b > c×c 時,輸出「Acute」。 ''' if a + b <= c: print('No') elif l < r: print('Obtuse') elif l == r: print('Right') elif l > r: print('Acute') |