[编程题] 寻找三角形
来源:互联网 发布:anaconda for mac 编辑:程序博客网 时间:2024/06/02 13:13
时间限制:1秒空间限制:32768K
三维空间中有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
代码:
#include<iostream>#include <math.h>#include <iomanip>#define MAX_NUM 50using namespace std;struct Triangle{ int x = 0; int y = 0; int z = 0; char c = 'N';};bool isTriangle(Triangle tri1, Triangle tri2, Triangle tri3){ //颜色判断 if ((tri1.c == tri2.c && tri2.c == tri3.c) || (tri1.c != tri2.c && tri1.c != tri3.c && tri2.c != tri3.c)){ //判断是否共线 Triangle t1, t2; t1.x = tri1.x - tri2.x; t1.y = tri1.y - tri2.y; t1.z = tri1.z - tri2.z; t2.x = tri1.x - tri3.x; t2.y = tri1.y - tri3.y; t2.z = tri1.z - tri3.z; double temp1 = t1.x * t2.x + t1.y + t2.y + t1.z* t2.z; double temp2 = sqrt((pow(t1.x, 2) + pow(t1.y, 2) + pow(t1.z, 2))*(pow(t2.x, 2) + pow(t2.y, 2) + pow(t2.z, 2))); if (temp1 == temp2 || temp1 + temp2 == 0){ return false; } else{ return true; } } else{ return false; }}double getLine(Triangle tri1, Triangle tri2){ return sqrt(pow((tri1.x - tri2.x), 2) + pow((tri1.y - tri2.y), 2) + pow((tri1.z - tri2.z), 2));}double getArea(Triangle tri1, Triangle tri2, Triangle tri3){ double a, b, c; a = getLine(tri1, tri2); b = getLine(tri1, tri3); c = getLine(tri2, tri3); double p = (a + b + c) / 2; double temp = p * (p - a)*(p - b)*(p - c); double S = sqrt(temp); return S;}int main(){ int N; Triangle tri[MAX_NUM]; cin >> N; for (int i = 0; i < N; i++){ cin >> tri[i].c; cin >> tri[i].x; cin >> tri[i].y; cin >> tri[i].z; } double max = 0; for (int i = 0; i < N; i++){ for (int j = i + 1; j < N; j++){ for (int k = j + 1; k < N; k++){ if (isTriangle(tri[i], tri[j], tri[k])){ double temp = getArea(tri[i], tri[j], tri[k]); if (temp>max) max = temp; } } } } cout << setiosflags(ios::fixed) << setprecision(5) << max << endl; return 0;}
*C++输出固定小数位数:cout << setiosflags(ios::fixed) << setprecision(5) << max << endl;
精确度的话去掉fixed即可。
1 0
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- 寻找三角形(编程题)
- 【算法题】寻找三角形
- mapreduce编程---寻找图中的三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 3--百度2017春招笔试真题编程题集合--寻找三角形 (Python)
- 百度2017春招笔试真题编程题集合--寻找三角形
- 百度2017春招笔试真题[编程题] 寻找三角形
- 百度2017春招笔试真题编程题集合:寻找三角形 [python]
- 蓝桥杯 Java 入门训练 圆的面积
- Unreal Engin_画廊制作笔记 _008<灯光处理,夜晚的画廊灯光设置>
- hdu 5334
- 链表的翻转
- CNN的反向传播推导与理解
- [编程题] 寻找三角形
- C语言学习历程——Training01整数算法训练05
- Android屏幕ldpi,mdpi,hdpi,xhdpi,xxhdpi的关系
- 翱旗科技发布四款新品,欲打造产品化、通用化DT服务
- BZOJ 1008 [HNOI2008]越狱
- 蓝桥杯 入门训练 Fibonacci数列 Java
- 文章标题 Markdown使用
- 狂涨结束:内存和固态硬盘终于要降价了
- Struts2框架的基本使用(二)