HihoCoder -#1700 : 相似顏色

時間限制: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;
}

庫函數寫法:

fgets的用法       sscanf的用法

#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;
}


發佈了26 篇原創文章 · 獲贊 8 · 訪問量 5861
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章