2021级新生程序设计班级天梯赛:2-3 请再一次做我的棋子

“世间的事,太痛苦了。我该怎样才能忘却呢?”

“下棋吧。”

“棋,能代替世间吗?”

“能。因为纵横十九道内,栖息着宇宙。”

《王者荣耀》中奕星的大招是画出一个矩形。LT 是一个强迫症患者,如果画出来的矩形不是正方形,他就会很难受。现在告诉你奕星大招的四个顶点,请你判断这个矩形是否为正方形。

输入格式:

第一行输入四个整数 xi​(0≤xi​≤10000)

第二行输入四个整数 yi​(0≤yi​≤10000)

输出格式:

如果矩形是正方形,输出 好耶!,否则输出 emo!

输入样例:

0 0 2 2
0 2 0 2

输出样例:

好耶!

实数判断相等要注意消除精度(ZZULIOJ)上之前有过 

# include 
# include 
int x[4], y[4];
double dis[20];
int id_dis = 0;
double get_Dis ( int x1, int y1, int x2, int y2 ) // (x1, y1)与(x2, y2)的距离
{

 long long dirx = x1 - x2; dirx *= dirx;
 long long diry = y1 - y2; diry *= diry;
 return sqrt(dirx + diry);
}
int equal ( double x, double y ) // 相等返回1,否则返回0
{

 if ( fabs(x - y) < 1e-9 )
    return 1;
 return 0;
}
int main ()
{
    int i, j;
    for (i = 0; i < 4; i ++ )
        scanf("%d",&x[i]);
    for (i = 0; i < 4; i ++ )
        scanf("%d",&y[i]);

    for (i = 0; i < 4; i ++ )
    {
        for (j = i + 1; j < 4; j ++ )
        {
            dis[id_dis ++] = get_Dis(x[i], y[i], x[j], y[j]);
        }
    }
    for (i = 0; i < id_dis; i ++ )
    {
        for (j = i + 1; j < id_dis; j++ )
        {
            if ( dis[i] > dis[j] )
            {
            double tmp = dis[i];
            dis[i] = dis[j];
            dis[j] = tmp;
            }
        }
    }
    if ( !equal(dis[0], 0) && equal(dis[0],dis[1]) && equal(dis[1], dis[2]) && equal(dis[2],dis[3]) && equal(dis[4], dis[5]) )
    {
        if ( equal(dis[0] * sqrt(2), dis[4]))
            puts("好耶!");
        else puts("emo!");
    }
    else puts("emo!");
    return 0;
}

 

你可能感兴趣的:(PTA,c语言)