小X与正方形

题目:

时间限制 : 1 Sec
内存限制 : 128 Mb
提交 : 109
解决 : 44

题目描述

小X的老师很喜欢围棋。众所周知,围棋的棋盘有19行19列。为方便起见,我们把这些行列按顺序编号为1~19,并用(x, y)表示第x列第y行的位置。例如下图中,A用(16,4)表示,B用(14, 3)表示。

现在老师让小X在棋盘上放4枚棋子,要求这4枚棋子组成一个正方形的四个顶点。但是小X喜欢三角形,不喜欢正方形,于是只放了3枚就跑出去玩去了。那么这最后的棋子就交给你来放了,请求出这枚棋子应该放在哪里?

输入

输入数据仅有一行包含6个用空格隔开的正整数x1, y1, x2, y2, x3, y3, 表示三枚棋子的位置为(x1, y1), (x2, y2), (x3, y3)

输出

输出一行包含两个正整数x和 y,两数之间用一个空格隔开;表示若将最后一枚棋子放在位置(x, y),它与之前的三枚棋子能组成一个正方形的四个顶点。数据保证方案唯一。

 

样例输入

样例1: 
4 4 4 16 16 16
样例2: 
2 1 4 2 3 4

样例输出

样例1: 
16 4
样例2: 
1 3
 
思路:
1、搜索(怎么搜我不管)。
2、应用勾股定理判断此数是否符合。
 
标程:
#include<bits/stdc++.h>
using namespace std;
int t,a[10],b[10],pd[10];
int goug(int r,int sp)
{
 int cc;
 cc=sqrt(r*r+sp*sp);
 return cc;
}
int main()
{
 cin>>a[1]>>b[1]>>a[2]>>b[2]>>a[3]>>b[3];
    pd[1]=goug(abs(a[1]-a[2]),abs(b[1]-b[2]));
    pd[2]=goug(abs(a[1]-a[3]),abs(b[1]-b[3]));
    pd[3]=goug(abs(a[3]-a[2]),abs(b[3]-b[2]));
    if (pd[1]==pd[3])
    {
     t=pd[3];
     pd[3]=pd[2];
     pd[2]=t;
     t=a[3];
     a[3]=a[2];
     a[2]=t;
        t=b[3];
     b[3]=b[2];
     b[2]=t;
    }
    if (pd[2]==pd[3])
    {
     t=pd[3];
     pd[3]=pd[1];
     pd[1]=t;
     t=a[3];
     a[3]=a[1];
     a[1]=t;
        t=b[3];
     b[3]=b[1];
     b[1]=t;
    }
    for (int i=1;i<=19;i++)
    {
     for (int j=1;j<=19;j++)
     {
      if ((i!=a[3])||(j!=b[3]))
      {
       pd[4]=goug(abs(a[1]-i),abs(b[1]-j));
       pd[5]=goug(abs(a[2]-i),abs(b[2]-j));
       pd[6]=goug(abs(a[3]-i),abs(b[3]-j));
       if (pd[4]==pd[6])
       {
        t=pd[6];
        pd[6]=pd[5];
        pd[5]=t;
     }
            if (pd[5]==pd[6])
            {
               t=pd[6];
               pd[6]=pd[4];
               pd[4]=t;
            }
      }
      for (int k=1;k<=3;k++)
      {
       if (pd[k]!=pd[k+3])break;
       if (k==3)
       {
        cout<<i<<" "<<j<<endl;
        return 0;
       }
      }
     }
    }
   
}
原文地址:https://www.cnblogs.com/leonqqs/p/7068480.html