POJ 1046 Color Me Less(水~)

来源:互联网 发布:苹果电脑影视制作软件 编辑:程序博客网 时间:2024/05/19 23:26

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:yint 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);               } } 
0 0
原创粉丝点击