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

我写的ac代码有点过于麻烦.

对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一, 十六进制是逢十六进一, 二进制就是逢二进一,以此类推,x进制就是逢x进位。
#include<stdio.h>
#include<string.h>
int main()
{
	char q[10000];
	int w[10000];
	scanf("%s",q);
	for(int i = 1 ; i < strlen(q) ; i++)
	{
		if(q[i] >= '0' && q[i] <= '9')
		{
			w[i] = q[i] - '0';
		}
		else if(q[i] == 'a')
		{
			w[i] = 10;
		}
		else if(q[i] == 'b')
		{
			w[i] = 11;
		}
		else if(q[i] == 'c')
		{
			w[i] = 12;
		}
		else if(q[i] == 'd')
		{
			w[i] = 13;
		}
		else if(q[i] == 'e')
		{
			w[i] = 14;
		}
		else if(q[i] == 'f')
		{
			w[i] = 15;
		}
	}	
	int k1,l1,m1;
	int max1 = 9999999,max2 = 9999999,max3 = 9999999;
	for(int i = 0 ; i <= 15 ; i++)
	{
		int k = ((w[1] * 16 + w[2]) - (i * 16 + i)) * ((w[1] * 16 + w[2]) - (i * 16 + i));
		if(max1 > k)
		{
			k1 = i;
			max1 = k;	
		}
		int l = ((w[3] * 16 + w[4]) - (i * 16 + i)) * ((w[3] * 16 + w[4]) - (i * 16 + i));
		if(max2 > l)
		{
			l1 = i;
			max2 = l;	
		}
		int m = ((w[5] * 16 + w[6]) - (i * 16 + i)) * ((w[5] * 16 + w[6]) - (i * 16 + i));
		if(max3 > m)
		{
			m1 = i;
			max3 = m;	
		}
	}
	printf("#");
	if(k1 <= 9)
	{
		printf("%d",k1);
	}
	else
	{
		if(k1 == 10)
		{
			printf("a");
		}
		else if(k1 == 11)
		{
			printf("b");
		}
		else if(k1 == 12)
		{
			printf("c");
		}
		else if(k1 == 13)
		{
			printf("d");
		}
		else if(k1 == 14)
		{
			printf("e");
		}
		else if(k1 == 15)
		{
			printf("f");
		}
	}
	if(l1 <= 9)
	{
		printf("%d",l1);
	}
	else
	{
		if(l1 == 10)
		{
			printf("a");
		}
		else if(l1 == 11)
		{
			printf("b");
		}
		else if(l1 == 12)
		{
			printf("c");
		}
		else if(l1 == 13)
		{
			printf("d");
		}
		else if(l1 == 14)
		{
			printf("e");
		}
		else if(l1 == 15)
		{
			printf("f");
		}
	}
	if(m1 <= 9)
	{
		printf("%d",m1);
	}
	else
	{
		if(m1 == 10)
		{
			printf("a");
		}
		else if(m1 == 11)
		{
			printf("b");
		}
		else if(m1 == 12)
		{
			printf("c");
		}
		else if(m1 == 13)
		{
			printf("d");
		}
		else if(m1 == 14)
		{
			printf("e");
		}
		else if(m1 == 15)
		{
			printf("f");
		}
	}
} 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值