时间限制:
10000ms
单点时限:
1000ms
内存限制:
256MB
描述
在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。
输入
#abcdef
其中abcdef是'0'-'9'或'a'-'f'。
输出
距离输入颜色最近的#rgb
#40e0d0
样例输出
#4dc
数学解法:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,c,d;
getchar();
scanf("%x",&d);
c=d%256;
b=d/256%256;
a=d/256/256;
int x,y,z;
x=(a-a/17*17)<((a/17+1)*17-a)?(a/17):(a/17+1);
y=(b-b/17*17)<((b/17+1)*17-b)?(b/17):(b/17+1);
z=(c-c/17*17)<((c/17+1)*17-c)?(c/17):(c/17+1);
printf("#%x%x%x\n",x,y,z);
return 0;
}
库函数写法:
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[3],l[3],e[3];
getchar();
fgets(s,3,stdin);
fgets(l,3,stdin);
fgets(e,3,stdin);
int a,b,c,d;
sscanf(s,"%x",&a);
sscanf(l,"%x",&b);
sscanf(e,"%x",&c);
int x,y,z;
x=(a-a/17*17)<((a/17+1)*17-a)?(a/17):(a/17+1);
y=(b-b/17*17)<((b/17+1)*17-b)?(b/17):(b/17+1);
z=(c-c/17*17)<((c/17+1)*17-c)?(c/17):(c/17+1);
printf("#%x%x%x\n",x,y,z);
return 0;
}