2008年11月10日月曜日

第4問 解答例

第4問(6点)の解答例です

#include<stdio.h>
#include<math.h>
int getr(char*);
int getg(char*);
int getb(char*);int main(void){
char a[8];
char cl[][8]={"black","blue","lime","aquq","red","fuchsia","yellow","white"};int r,g,b,clr[8],clg[8],clb[8],i,clnum;
float dk2, min;

clr[0]=0;clr[1]=0;clr[2]=0;clr[3]=0;clr[4]=255;clr[5]=255;clr[6]=255;clr[7]=255;
clg[0]=0;clg[1]=0;clg[2]=255;clg[3]=255;clg[4]=0;clg[5]=0;clg[6]=255;clg[7]=255;
clb[0]=0;clb[1]=255;clb[2]=0;clb[3]=255;clb[4]=0;clb[5]=255;clb[6]=0;clb[7]=255;while(scanf("%s",&a),a[0]!='0'){r=getr(a);g=getg(a);b=getb(a);min=sqrt(pow(r-clr[7],2)+pow(g-clg[7],2)+pow(b-clb[7],2));
clnum=7;
for(i=6;i>=0;i--){
dk2=sqrt(pow(r-clr[i],2)+pow(g-clg[i],2)+pow(b-clb[i],2));
if(dk2<=min){min=dk2;clnum=i;};}
printf("カラーは %s\n",cl[clnum]);}
return 0;
}

int getr(char a[]){
int i,j;
if(a[1]>='0' && a[1]<='9')
i=a[1]-'0';
else
i=a[1]-'a'+10;
if(a[2]>='0' && a[2]<='9')
j=a[2]-'0'; else j=a[2]-'a'+10;
return (i*16+j);
}
int getg(char a[]){
int i,j;
if(a[3]>='0' && a[3]<='9')
i=a[3]-'0';
else
i=a[3]-'a'+10;
if(a[4]>='0' && a[4]<='9')
j=a[4]-'0';
else j=a[4]-'a'+10;
return (i*16+j);
}

int getb(char a[]){
int i,j;
if(a[5]>='0' && a[5]<='9')
i=a[5]-'0';
else
i=a[5]-'a'+10;
if(a[6]>='0' && a[6]<='9')
j=a[6]-'0';
else j=a[6]-'a'+10;
return (i*16+j);

0 件のコメント: