AOJ 0176 What Color?
こんにちは川です。
今回は、計算がややこしい?ですかね。
自分は、16進数表示された文字列から10進数に直す際は、配列の
文字のアスキーコード表に対応した要素番号に値を保存しました。
#include<bits/stdc++.h>
using
namespace
std;
int
main()
{
string color[]={
"black"
,
"blue"
,
"lime"
,
"aqua"
,
"red"
,
"fuchsia"
,
"yellow"
,
"white"
};
int
colornum[8][3]={{0,0,0},{0,0,255},{0,255,0},
{0,255,255},{255,0,0},{255,0,255},{255,255,0},{255,255,255}};
int
value[200]={};
for
(
int
i=0;i<10;i++)value[
'0'
+i]=i;
for
(
int
i=0;i<6;i++)value[
'a'
+i]=10+i;
string str;
while
(cin>>str&&str!=
"0"
){
int
num[3];
for
(
int
i=0;i<3;i++)num[i]=value[str[1+2*i]]*16+value[str[2+2*i]];
int
ans[8]={};
for
(
int
i=0;i<8;i++)
for
(
int
j=0;j<3;j++)
ans[i]+=
pow
(colornum[i][j]-num[j],2);
int
co=0;
for
(
int
i=1;i<8;i++)
if
(ans[co]>ans[i])co=i;
cout<<color[co]<<endl;
}
}