当前位置:编程学习 > C/C++ >>

ZOJ-1067基本运算题

1067:给出16种RGB值作为基准,将后来的颜色值映射到距离最近的颜色。

距离的定义为

 

Example

 Input

 0 0 0

255 255 255

0 0 1

1 1 1

128 0 0

0 128 0

128 128 0

0 0 128

126 168 9

35 86 34

133 41 193

128 0 128

0 128 128

128 128 128

255 0 0

0 1 0

0 0 0

255 255 255

253 254 255

77 79 134

81 218 0

-1 -1 -1

 

Output

 

(0,0,0) maps to (0,0,0)

(255,255,255) maps to (255,255,255)

(253,254,255) maps to (255,255,255)

(77,79,134) maps to (128,128,128)

(81,218,0) maps to (126,168,9)

 

 

 

简单题。依次计算找距离最小即可。

 

C++代码

#include<stdio.h> 

#include<iostream> 

using namespace std; 

 

int color[16][3]; 

int main() 

    int R,G,B; 

    int index; 

    int diff; 

    int cal; 

 

    //目标颜色

    for(int i=0;i<16;i++) 

    { 

        cin>>color[i][0]; 

        cin>>color[i][1]; 

        cin>>color[i][2]; 

    } 

 

    while(1) 

    { 

        index=-1; 

        diff=-1; 

        cin>>R; 

        cin>>G; 

        cin>>B; 

         

        if(R==-1&&G==-1&&B==-1) 

            break; 

 

        for(int i=0;i<16;i++) 

        { 

            cal=(R-color[i][0])*(R-color[i][0])+(G-color[i][1])*(G-color[i][1])+(B-color[i][2])*(B-color[i][2]); 

            if(diff==-1||cal<diff) 

            { 

                diff=cal; 

                index=i; 

            } 

        } 

 

        printf("(%d,%d,%d) maps to (%d,%d,%d)\n",R,G,B,color[index][0],color[index][1],color[index][2]); 

 

    } 

 

 

     

}   

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,