在CSS中我们可以用井号(#)加6位十六进制数表示一种颜色,例如#000000是黑色,#ff0000是红色,#ffd700是金色。
同时也可以将六位颜色#RRGGBB简写为#RGB三位颜色。例如#000与#000000是相同的,#f00与#ff0000是相同的,
#639与#663399是相同的。
对于两个颜色#abcdef和#ghijkl,我们定义其距离是(ab - gh)2 + (cd - ij)2 + (ef - kl)2。(其中ab, cd, ef, gh, ij, kl
都是十六进制数,也即0~255的整数)
给定一个六位颜色#abcdef,请你求出距离它最近的三位颜色#rgb。
Input#abcdef
其中abcdef是'0'-'9'或'a'-'f'。
Output距离输入颜色最近的#rgb
#40e0d0
Sample Output
#4dc
#include<bits/stdc++.h>
using namespace std;
int Transform(char x)//化为十进制
{
if(x>='0'&&x<='9')
return x-'0';
if(x>='a'&&x<='f')
return x-'a'+10;
}
char Transform2(int y)//化为十六进制
{
if(y<10)
return y+'0';
else{
return y-10+'a';
}
}
int main()
{
string s;
while(cin>>s)
{
int a=Transform(s[1])*16+Transform(s[2]);
int b=Transform(s[3])*16+Transform(s[4]);
int c=Transform(s[5])*16+Transform(s[6]);
int Min=1e9;
char aa,bb,cc;
for(int i=0;i<16;i++)
for(int j=0;j<16;j++)
for(int k=0;k<16;k++)
{
int temp=(a-(i*16+i))*(a-(i*16+i))+(b-(j*16+j))*(b-(j*16+j))+(c-(k*16+k))*(c-(k*16+k));
if(temp<Min)
{
Min=temp;
aa=Transform2(i);
bb=Transform2(j);
cc=Transform2(k);
}
}
cout<<"#"<<aa<<bb<<cc<<endl;
}
}