您的位置:首页 > 编程语言

寻找三角形(编程题)

2017-04-30 20:01 351 查看
       三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用'R', 'G', 'B'表示。 
现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。
但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。 


输入描述:

首先输入一个正整数N三维坐标系内的点的个数.(N <= 50)
接下来N行,每一行输入 c x y z,c为'R', 'G', 'B' 的其中一个。x,y,z是该点的坐标。(坐标均是0到999之间的整数)


输出描述:

输出一个数表示最大的三角形面积,保留5位小数。


输入例子:

5
R 0 0 0
R 0 4 0
R 0 0 3
G 92 14 7
G 12 16 8


输出例子:

6.00000

#include<iostream>

#include<algorithm>

using namespace std;

struct node

   {

      char col;

      int x,y,z;   

   };

double Max=0;

vector<node> V;

double  Dis(int i,int j)

   {

     double dis;

     dis=sqrt(double((V[i].x-V[j].x)*(V[i].x-V[j].x)+(V[i].y-V[j].y)*(V[i].y-V[j].y)+(V[i].z-V[j].z)*(V[i].z-V[j].z)));

     return dis;

   }

bool IsSan(int i,int j,int k)

   {

       int a=Dis(i,j);

       int b=Dis(i,k);

       int c=Dis(j,k);

       if((a+b)>c&&(a+c)>b&&(b+c)>a)

           return true;

       else

           return false;

   }

bool Color(int i,int j,int k)

   {

      if((V[i].col==V[j].col)&&(V[j].col==V[k].col))

          return true;

      else if((V[i].col!=V[j].col)&&(V[j].col!=V[k].col)&&(V[i].col!=V[k].col))

          return true;

      return false;

   }

double  Area(int i,int j,int k)

    {

        double a=Dis(i,j);

        double b=Dis(i,k);

        double c=Dis(j,k);

        double p=(a+b+c)/2;

        double area=sqrt(p*(p-a)*(p-b)*(p-c));

        return area;

    }

int main()

    {

       int n;

       double area;

       cin>>n;

       node t;

       for(int i=0;i<n;i++)

         {

           cin>>t.col>>t.x>>t.y>>t.z;

           V.push_back(t);

         }

       for(int i=0;i<n;i++)

         {

           for(int j=i+1;j<n;j++)

              { for(int k=j+1;k<n;k++)

                 {  

                      if(IsSan(i,j,k)&&Color(i,j,k))

                          area=Area(i,j,k);

                      if (area>Max)                          

                          Max=area;

                 }

              }

         }

      printf("%.5lf",Max);

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  寻找三角形编程