HihoCoder - 1700

本文介绍了一个算法,该算法用于寻找距离六位颜色代码#abcdef最近的三位颜色代码#rgb。通过计算不同颜色间的距离,即(ab-gh)²+(cd-ij)²+(ef-kl)²,并使用十六进制数值进行比较,最终找到最接近的颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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<stdio.h>
int a[20];
char b[30];
int pin(int i)
{
    if(b[i]<97)
        return b[i]-48;
    else
        return b[i]-87;
}
void put(int i)
{
    if(i<=9)
    {
        printf("%c",i+48);
    }
    else
    {
        printf("%c",i+87);
    }
}
void cha(int pp)
{
    for(int i=0;i<16;i++)
    {
        if(pp==a[i])
        {
             put(i);
             return;
        }
        else if(pp>a[i]&&pp<a[i+1])
        {
            if(pp-a[i]<=a[i+1]-pp)
            {
                put(i);
                return;
            }
            else
            {
                put(i+1);
                return;
            }
        }
    }
}
int main()
{
    int pan;
    a[0]=0;
    for(int i=1;i<16;i++)
    {
        a[i]=i*16+i;
    }
    while(~scanf("%s",b))
    {
        printf("#");
        pan=pin(2);
        pan+=pin(1)*16;
        cha(pan);
        pan=pin(4);
        pan+=pin(3)*16;
        cha(pan);
        pan=pin(6);
        pan+=pin(5)*16;
        cha(pan);
        printf("\n");
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值