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

思路:拿10进制来举例子:例如:40,最接近的数字为44或55中的一个,16进制亦是如此。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
char str[100];
char Hex[17]={"0123456789abcdef"};
ll change(char s)
{
   if(s>='0'&&s<='9')
   {
      return s-'0';
   }
   else if(s>='a'&&s<='f')
   {
      return 10+s-'a';
   }
}
int main()
{
   while(~scanf("%s",str))
   {
      ll a=16*change(str[1])+change(str[2]);
      ll b=16*change(str[3])+change(str[4]);
      ll c=16*change(str[5])+change(str[6]);
    //  printf("%lld %lld %lld\n",a,b,c);
      ll aa=a/17;//我们要凑的数位16*a+a,即17*a,所aa=a/17;
      if(a-aa*17>17*aa+17-a)//这里我们需要比较44 55 离40的大小,即分表为17*aa,a,aa+17;
         aa=aa+1;    //16*(aa+1)+(aa+1)即是17*aa+17
      ll bb=b/17;
      if(b-bb*17>17*bb+17-b)
         bb=bb+1;
      ll cc=c/17;
      if(c-cc*17>17*cc+17-c)
         cc=cc+1;
      if(aa>15) aa=15;
      if(bb>15) bb=15;
      if(cc>15) cc=15;
      printf("#%c%c%c\n",Hex[aa],Hex[bb],Hex[cc]);
   }
   return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值