UVa 152 - Tree's a Crowd解题报告

来源:互联网 发布:淘宝可以改会员名吗 编辑:程序博客网 时间:2024/06/04 17:45
题意:

每一颗树都与其他的树计算距离, 取最近距离(下取整). 如果最近距离在 [0,9] 之间, 就记录下来. 最后输出各个最近距离的个数。也就是说要每个点与其他点都比较一次,求最小距离。


#include <iostream>#include <cstring>#include <algorithm>#include <cmath>using namespace std;struct dots{double x, y, z;};dots point[5010];double distances(dots, dots);int counts[10];int main(){//freopen("data.txt", "r", stdin);int len = 0;for(int i = 0; ; i++){scanf("%lf%lf%lf", &point[i].x, &point[i].y, &point[i].z);if(point[i].x == 0.0 && point[i].y == 0.0 && point[i].z == 0.0)break;len++;}for(int i = 0; i < len; i++)//对每个点与其他进行比较{int m = 99999;for(int j = 0; j < len; j++)//对i点与其他点比较一次{if(i == j)continue;m = min(distances(point[i], point[j]), (double)m);//提取距离的最小值,隐含了向下取整}for(int i = 0; i < 10; i++)//对提取到的最小值进行统计if(i == m){counts[i]++;break;}}for(int i = 0; i < 10; i++)printf("%4d", counts[i]);cout << endl;return 0;}double distances(dots a, dots b){return sqrt(pow(a.x - b.x, 2) +pow(a.y - b.y, 2) +pow(a.z - b.z, 2));}




0 0
原创粉丝点击