[编程题] 寻找三角形
来源:互联网 发布:windows arping 编辑:程序博客网 时间:2024/06/03 02:26
三维空间中有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
这题最重要的是已知空间中的三个点,求这三个点构成三角形的面积
我们可以先求出这个三角形的三条边a,b,c,再用海伦公式求面积
s=sqrt(p* (p-a) * (p-b) * (p-c)) 其中p=(a+b+c) / 2
知道这些以后,我们只需要暴力求最大值即可
#include"iostream"#include"math.h"#include"stdlib.h"#include <iterator>#include"stdio.h"using namespace std;struct noode{ char coolor; int x,y,z;};double dis (noode a,noode b){ return sqrt(1.0*(a.x-b.x)*(a.x-b.x)+1.0*(a.y-b.y)*(a.y-b.y)+1.0*(a.z-b.z)*(a.z-b.z));}int main(){ int n; double mmax=-1e9; cin>>n; noode ai[100]; for(int i=0;i<n;i++) { cin>>ai[i].coolor>>ai[i].x>>ai[i].y>>ai[i].z; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++ ) { if(i==j) continue; for(int k=0;k<n;k++) { if(k==i||k==j) continue; if((ai[i].coolor==ai[j].coolor&&ai[j].coolor==ai[k].coolor)||(ai[i].coolor!=ai[j].coolor&&ai[j].coolor!=ai[k].coolor&&ai[i].coolor!=ai[k].coolor)) { double a=dis(ai[i],ai[j]); double b=dis(ai[i],ai[k]); double c=dis(ai[j],ai[k]); double p=(a+b+c)/2; double mianji=sqrt(p*(p-a)*(p-b)*(p-c)); if(mianji>mmax) mmax=mianji; //cout<<a<<" "<<b<<" "<<c<<endl; } } } } printf("%.5lf\n",mmax); return 0;}
2 0
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- 寻找三角形(编程题)
- 【算法题】寻找三角形
- mapreduce编程---寻找图中的三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 3--百度2017春招笔试真题编程题集合--寻找三角形 (Python)
- 百度2017春招笔试真题编程题集合--寻找三角形
- 百度2017春招笔试真题[编程题] 寻找三角形
- 百度2017春招笔试真题编程题集合:寻找三角形 [python]
- intelj idea 创建 Servlet 类
- C++第4回作业
- Android 开机动画客制化
- java 小数位数保留的几种方法
- [程序员面试金典-查找-]找出字符串
- [编程题] 寻找三角形
- 直接插入排序
- 深搜输出可能的硬币组合
- Activity滑动关闭的效果
- 记录android Property Animation(属性动画)
- C#构造表头和表体json
- Maven安装和配置,eclipse创建Maven项目
- node.js模块小记之--fs
- c++程序编译流程