题意:输入若干个点的三维坐标,以坐标(0,0,0)结束,计算出每个点和其它各点的距离,并求出每个点和其它各点的距离中的最小距离(数值要取整,如1.414,则取值1,不用四舍五入),如果该最小距离小于10,则histogram(直方图)中数值等于该最小距离的位置加1,最后输出histogram(直方图),每个数占4个空间位。(from 百度)
表示读不懂题目,英语太差啊~~但则这道题很水,暴力直接解决…
#include<stdio.h>
#include<string.h>
#include<math.h>
const int maxn=5000+10;
int tree[maxn][3],a[10];
int main()
{
int t=0;
memset(a,0,sizeof(a));
while(~scanf("%d%d%d",&tree[t][0],&tree[t][1],&tree[t][2])){
if(!tree[t][0]&&!tree[t][1]&&!tree[t][2])
break;
t++;
}
for(int i=0;i<t;i++){
int min=10,k=0;
for(int j=0;j<t;j++){
if(i!=j){
int sum=(tree[i][0]-tree[j][0])*(tree[i][0]-tree[j][0])+(tree[i][1]-tree[j][1])*(tree[i][1]-tree[j][1])+(tree[i][2]-tree[j][2])*(tree[i][2]-tree[j][2]);
int dis=sqrt(sum);
if(dis<min)
min=dis;
}
}
if(min<10)
a[min]++;
}
for(int i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
--------------------------------------------------------------------------------------------
Keep It Simple,Stupid!
--------------------------------------------------------------------------------------------