理解这个代码方法/数学

时间:2017-05-06 14:09:55

标签: c++

我试图解决一个问题,但我似乎无法理解它应该如何解决,就像我知道得到一个正方形的坐标你需要2个角来得到另外2个但这只是失败,这是问题所在:

  帕什马克爱上了一个名叫帕米达的迷人女孩   一年前......

     

今天,Pashmak在一个浪漫的花园里与他的伴侣开会。   不幸的是,Pashmak已经忘记了花园的位置。但是他   记得花园看起来像一个两侧平行的正方形   坐标轴。他还记得,只有一棵树   在广场的每个顶点上。现在,Pashmak只知道这个位置   两棵树。帮助他找到剩下的两个人的位置。

     

输入第一行包含四个以空格分隔的x1,y1,x2,y2   ( - 100≤x1,y1,x2,y2≤100)整数,其中x1和y1是   第一棵树的坐标和x2和y2是坐标   第二棵树。它保证了给定的点是不同的。

     

输出如果没有问题的解决方案,请打印-1。除此以外   打印四个空格分隔的整数x3,y3,x4,y4对应   其他两棵树的坐标。如果有几种解决方案   你可以输出任何一个。

     

请注意,x3,y3,x4,y4必须在范围内   ( - 1000≤X3,Y3,X4,Y4≤1000)。

     

实例
  输入
   0 0 0 1
   输出
  1 0 1 1
  输入
  0 0 1 1
  输出
  0 1 1 0
  输入
  0 0 1 2
  输出
  -1

我也真的不明白为什么最后一个问题无法解决,尽管可能是

  

0 2 1 0

因为输出也是解决问题的代码:

#include <stdio.h>
#include <math.h>
int main(){
    int x1,x2,x3,x4,y1,y2,y3,y4;
    scanf("%d %d %d %d", &x1, &y1, &x2, &y2);

    if (abs(x2-x1) == abs(y2 - y1)){
            y4 = y2;
            y3= y1;
            x4=x1;
            x3=x2;
            printf("%d %d %d %d", x4 ,y4, x3, y3);

    }else if (x1 == x2){

        x4= abs(y2-y1)+x1;
        x3=x4;
        y4=y1;y3=y2;
        printf("%d %d %d %d", x4 ,y4, x3, y3);
    }else if( y2 == y1){
            x3=x1;
            x4=x2;
            y4 = abs(x2-x1) + y2;
            y3 = y4;
            printf("%d %d %d %d", x4 ,y4, x3, y3);
    }else {

        printf("-1");
    }

    return 0;
}

如果有人能够解释使用这些数学或这些方法背后的概念,那么我们真的很感激! :)

0 个答案:

没有答案