給你一個三角形的邊長,請你判斷它是銳角 (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的值互相轉換!!!