百度:寻找三角形
来源:互联网 发布:气象数据知识试题 编辑:程序博客网 时间:2024/06/05 06:00
三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用’R’, ‘G’, ‘B’表示。
现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。
但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。
输入描述:
首先输入一个正整数N三维坐标系内的点的个数.(N <= 50)
接下来N行,每一行输入 c x y z,c为’R’, ‘G’, ‘B’ 的其中一个。x,y,z是该点的坐标。(坐标均是0到999之间的整数)
输出描述:输出一个数表示最大的三角形面积,保留5位小数。输入例子:5R 0 0 0R 0 4 0R 0 0 3G 92 14 7G 12 16 8输出例子:6.00000
没有什么捷径,暴力求解:
- 判断是否是一个颜色或者都不同
- 是否可以组成三角形
- 面积公式S=sqrt(p*(p-a)(p-b)(p-c)) ,p=(a+b+c)/2
- 节点struct node{
char c;
int x;
int y;
int z;
} 把node放在vector中
// sanjiaoxing.cpp.cpp : 定义控制台应用程序的入口点。//#include "cmath"#include "iostream"#include "map"#include "vector"#include "iomanip"using namespace std;//whether it is a triangle,parameters:three sidesbool whetherTriangle(double a, double b, double c) { if ((a < (b + c)) && (b < (a + c)) && (c < (a + b))) { return true; } return false;}double triArea(double a, double b, double c){ double p = (a + b + c) / 2; double area; area = sqrt(p*(p - a)*(p - b)*(p - c)); return area;}struct Node { char c; int x, y, z;};int main(){ vector<Node> sidesMap; int n; cin >> n; for (int i = 0; i < n; i++) { Node node; cin >> node.c; cin >> node.x; cin >> node.y; cin >> node.z; sidesMap.push_back(node); } double maxArea = 0; //Directly Calculating for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) for (int k = j + 1; k < n; k++) { if ((sidesMap[i].c == sidesMap[j].c) && (sidesMap[j].c == \ sidesMap[k].c) || (sidesMap[i].c != sidesMap[j].c) && \ (sidesMap[j].c != sidesMap[k].c)&& (sidesMap[i].c != sidesMap[k].c)) { //whether it is a triangle //three slides double a = sqrt((sidesMap[i].x - sidesMap[j].x)*(sidesMap[i].x - \ sidesMap[j].x) + (sidesMap[i].y - sidesMap[j].y)*(sidesMap[i].y \ - sidesMap[j].y) + (sidesMap[i].z - sidesMap[j].z) *(sidesMap[i].z \ - sidesMap[j].z)); double b = sqrt(pow(sidesMap[i].x - sidesMap[k].x,2) + pow(sidesMap[i].y -\ sidesMap[k].y,2) + pow(sidesMap[i].z - sidesMap[k].z,2)); double c = sqrt(pow(sidesMap[j].x - sidesMap[k].x,2) + pow(sidesMap[j].y -\ sidesMap[k].y,2) + pow(sidesMap[j].z - sidesMap[k].z,2)); if (whetherTriangle(a, b, c)) { //triangle area double area = triArea(a, b, c); if (maxArea < area) maxArea = area; } } } cout.setf(ios::fixed); cout << fixed << setprecision(5) << maxArea << endl; return 0;}
阅读全文
0 0
- 百度笔试-寻找三角形
- 寻找三角形-百度-最大值
- 百度:寻找三角形
- 【百度春招】寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 3--百度2017春招笔试真题编程题集合--寻找三角形 (Python)
- 百度2017春招笔试真题编程题集合--寻找三角形
- 百度2017春招笔试真题[编程题] 寻找三角形
- 百度2017春招笔试真题编程题集合:寻找三角形 [python]
- 牛客网 寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- 【算法题】寻找三角形
- 防止a标签下载弹窗
- Mybatis多数据库支持
- 织梦全站动态和恢复静态设置
- android 播放音频
- linux虚拟网络接口 bond详解
- 百度:寻找三角形
- 【Ubuntu】批量修改图片大小的命令
- nginx设置proxy_pass长连接
- Docker与自动化部署
- JS笔记
- DNS内网服务器
- seajs
- Mac各种安装记录:homebrew,zsh,Nginx,MySQL,PHP 等持续更新
- 第七届蓝桥杯决赛JavaA组第二题_凑平方数