Description
先给出16个点坐标,然后给出一些点,问这个点与已给出16个点中哪个点距离最小
Input
首先输入16点的坐标Xi,Yi,Zi(i=0,1,..16),然后输入多个查询点点坐标,以-1 -1 -1结束输入
Output
对每个查询点,找出16个点中哪个点与其距离最短,若有多个点满足条件,输出先满足条件的点
Sample Input
0 0 0
255 255 255
0 0 1
1 1 1
128 0 0
0 128 0
128 128 0
0 0 128
126 168 9
35 86 34
133 41 193
128 0 128
0 128 128
128 128 128
255 0 0
0 1 0
0 0 0
255 255 255
253 254 255
77 79 134
81 218 0
-1 -1 -1
Sample Output
(0,0,0) maps to (0,0,0)
(255,255,255) maps to (255,255,255)
(253,254,255) maps to (255,255,255)
(77,79,134) maps to (128,128,128)
(81,218,0) maps to (126,168,9)
Solution
水题一道,先暴搜找出最小值,再搜一遍找到第一个最小值输出即可
Code
#include<stdio.h>
#define min(x,y) x<y?x:y
int main()
{
int g[50][3],i=0,j,min,a,b,c;
for(i=0;i<16;i++)
for(j=0;j<3;j++)
scanf("%d",&g[i][j]);
scanf("%d%d%d",&a,&b,&c);
while(!(a==-1&&b==-1&&c==-1))
{
min=10000000;
for(i=0;i<16;i++)//找出最小值
min=min(min,((a-g[i][0])*(a-g[i][0])+(b-g[i][1])*(b-g[i][1])+(c-g[i][2])*(c-g[i][2])));
for(i=0;i<16;i++)//输出第一个最小值
if(min==(a-g[i][0])*(a-g[i][0])+(b-g[i][1])*(b-g[i][1])+(c-g[i][2])*(c-g[i][2]))
{
printf("(%d,%d,%d) maps to (%d,%d,%d)\n",a,b,c,g[i][0],g[i][1],g[i][2]);
break;
}
scanf("%d%d%d",&a,&b,&c);
}
}