当前位置: 代码迷 >> 综合 >> HihoCoder - 1700【模拟】
  详细解决方案

HihoCoder - 1700【模拟】

热度:99   发布时间:2023-11-20 06:09:52.0

在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

Sample Input
#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;}
}

  相关解决方案