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