1067:給出16種RGB值作為基准,將後來的顏色值映射到距離最近的顏色。
距離的定義為
Example
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
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)
簡單題。依次計算找距離最小即可。
C++代碼
#include<stdio.h>
#include<iostream>
using namespace std;
int color[16][3];
int main()
{
int R,G,B;
int index;
int diff;
int cal;
//目標顏色
for(int i=0;i<16;i++)
{
cin>>color[i][0];
cin>>color[i][1];
cin>>color[i][2];
}
while(1)
{
index=-1;
diff=-1;
cin>>R;
cin>>G;
cin>>B;
if(R==-1&&G==-1&&B==-1)
break;
for(int i=0;i<16;i++)
{
cal=(R-color[i][0])*(R-color[i][0])+(G-color[i][1])*(G-color[i][1])+(B-color[i][2])*(B-color[i][2]);
if(diff==-1||cal<diff)
{
diff=cal;
index=i;
}
}
printf("(%d,%d,%d) maps to (%d,%d,%d)\n",R,G,B,color[index][0],color[index][1],color[index][2]);
}
}