2013年1月4日 星期五

[ZJ] d980. 11479 - Is this the easiest problem?


內容 :
三角形是一種有三個正邊的幾何形狀。但是並非任意三個邊都可以形成一個三角形,這三個邊必需構成一個封閉區域。三角形可以其邊長來分類,本題便是要你判定三角形的種類。 
輸入說明 :
輸入的第一行有一個正整數 T<20,表示有 T 筆測試資料。接下來的 T 行每行有三個 32 位元的有號整數。

輸出說明 :
對於每筆測資請輸出一行,其格式為:Case {x}: {triangle type}。其中 x 表示測資編號,{triangle type} 為三角形的種類。依三邊長的值,{triangle type} 是以下的一種:
  • Invalid - 這三邊無法形成一個三角形 
  • Equilateral  -  三邊均等長
  • Isosceles  - 恰有兩邊等長
  • Scalene - 三邊均不等長
範例輸入 :
41 2 51 1 14 4 23 4 5
範例輸出 :
Case 1: InvalidCase 2: EquilateralCase 3: IsoscelesCase 4: Scalene
提示 :
32 位元的有號整數 (32 bit signed integer):-2147483648 ~ 2147483647
出處 :
UVa ACM 11479 (管理:snail)

這題很不湊巧地,卡在if 中的型態,要用long long

#include<stdio.h>
#define swap(x,y) {long long t=x; x=y; y=t;}
int main() {
    int T, C = 0;
    scanf("%d", &T);
    while(T--) {
        long long n[3];
        scanf("%lld %lld %lld", &n[0], &n[1], &n[2]);
        if(n[0] > n[2]) swap(n[0], n[2]);
        if(n[1] > n[2]) swap(n[1], n[2]);
        if(n[0] > n[1]) swap(n[0], n[1]);
        printf("Case %d: ",++C);
        if(n[0] + n[1] <= n[2]) puts("Invalid");
        else if(n[0] == n[2] && n[1] == n[2]) puts("Equilateral");
        else if(n[0] == n[1] || n[1] == n[2]) puts("Isosceles");
        else puts("Scalene");
    }
    return 0;
}

沒有留言:

張貼留言