简单题.不过我看的时候看不懂,之后参考了别人的解题报告才明白题目的意思
计算每个树到其他树的最近距离,如果这个距离小于10,保存.
最后输出每个距离的数量.
摘抄一些比较重要的句子.
determine how many of them have closest neighbours that are less than 1 unit away, how many with closest neighbours 1 or more but less than 2 units away, and
so on up to those with closest neighbours 9 or more but less than 10 units away.
测定有多少最近的距离小于1, 多少大于1小于2, 等等直到最近的距离大于9小于10;
Thus if is the distance between
the i'th point and its nearest neighbour(s) and
, with j and k integers and k = j+1, then this point (tree) will contribute 1 to
the j'th bin in the histogram (counting from zero).
因此如果最近距离大于等于j小于k, j和k都是整数切相差1, 那么这个值将为j加一.
#include <stdio.h>
#include <math.h>
typedef struct point
{
int x, y, z;
};
int main()
{
//freopen("input.txt", "r", stdin);
int cnt= 0;
int num[10] = {0};
struct point tree[5500];
int i, j;
for (i = 0;; i++)
{
scanf("%d%d%d", &tree[i].x, &tree[i].y, &tree[i].z);
if (tree[i].x + tree[i].y + tree[i].z == 0)
{
break;
}
cnt = i + 1;
}
for (i = 0; i < cnt; i++)
{
int mindis = 1000;
for (j = 0; j < cnt; j++)
{
if (j == i)
continue;
else
{
int c = (int)sqrt(pow(tree[i].x - tree[j].x, 2) + pow(tree[i].y - tree[j].y, 2) + pow(tree[i].z - tree[j].z, 2));
if (c < mindis)
mindis = c;
}
}
if (mindis < 10)
num[mindis]++;
}
for (i = 0; i < 10; i++)
printf("%4d", num[i]);
printf("\n");
return 0;
}