給你一個三角形的邊長,請你判斷它是銳角 (acute)、直角 (right)、或是鈍角 (obtuse) 三角形。
輸入說明 :
輸入只有一行,含有三個由空白隔開的正整數 a, b, c (0 < a, b, c ≤ 46340),代表三角形的邊長。
輸出說明 :
依三角形的類別輸出「acute triangle」、「right triangle」、或「obtuse triangle」。
範例輸入 :
3 4 5
範例輸出 :
right triangle
程式碼 :
#include <stdio.h> int main() { int a,b,c; while(scanf("%d%d%d",&a,&b,&c)==3) { if(a > c) a^=c^=a^=c; if(b > c) b^=c^=b^=c; a = a * a; b = b * b; c = c * c; if((a+b) == c) printf("right triangle\n"); else if((a+b) < c) printf("obtuse triangle\n"); else printf("acute triangle\n"); } return 0; }
http://zerojudge.tw/ShowProblem?problemid=d507
if(a > c)
回覆刪除09.
a^=c^=a^=c;
10.
if(b > c)
11.
b^=c^=b^=c;
這是什麼意思??
a^=c^=a^=c; <= 是交換a和c的內容
回覆刪除如果寫成以下的方式會比較好理解
temp = a;
a = c;
c = temp;
------------------------------------------
第9行交換的過程如下(a^=c^=a^=c; 從右至左拆解!!)
a = a ^ c;
c = c ^ a;
a = a ^ c;
今天我們假設a=3 c=5 轉成2進位 a=011 c=101 套入上面那三行
a = a ^ c;
110 = 011 ^ 101;
c = c ^ a;
011 = 101 ^ 110;
a = a ^ c;
101 = 110 ^ 011;
所以 a=101 c=011 轉成十進位 a=5 c=3
所以只用這一行就可以把a和c的值互相轉換!!!