HihoCoder - 1700【模拟】

在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;
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值