zoj3383

本文介绍了一种从输入中解析颜色值,并将其转换为灰度级别,再根据这些级别绘制简单图像的方法。该方法首先从输入字符串中提取宽度和高度参数,接着读取每个像素的颜色值,并计算出平均灰度值。最后根据平均值绘制图像。

一道做到我流泪又流汗的题!!!题目什么也不说就让你看sample,真实。。。。特别是w和h的交换,哎,无语。。。。

#include<iostream>
#include<string>
using namespace std;
char ss[200];
string a[305][305];
int b[305][305];

int main(){
       // freopen("in.txt","r",stdin);
      //  freopen("out.txt","w",stdout);
    while(scanf("%s",ss)!=EOF){
        cout<<ss<<endl;
         int w=0,h=0;
         char* u=ss;
        while(*u!='x'){
            w=w*10+(*u-'0');
            u++;}
            u++;
            while(*u!='/0'){
               h=h*10+(*u-'0');
               u++;}

        int sum=0;
        memset(b,0,sizeof(b));

      int t=w;w=h;h=t;
        for(int i=0;i<w;i++){
            for(int j=0;j<h;j++){
                cin>>a[i][j];
                int read=0;
                if('0'<=a[i][j][1]&&a[i][j][1]<='9')
               read=read*16+(a[i][j][1]-'0');
               else{read=read*16+(a[i][j][1]-'A'+10);}


                    if('0'<=a[i][j][2]&&a[i][j][2]<='9')
               read=read*16+(a[i][j][2]-'0');
               else {read=read*16+(a[i][j][2]-'A'+10);}


                    int green=0;
                    if('0'<=a[i][j][3]&&a[i][j][3]<='9')
               green=green*16+(a[i][j][3]-'0');
               else{green=green*16+(a[i][j][3]-'A'+10);}

 


                    if('0'<=a[i][j][4]&&a[i][j][4]<='9')
               green=green*16+(a[i][j][4]-'0');
               else{green=green*16+(a[i][j][4]-'A'+10);}


                    int blue=0;
                   if('0'<=a[i][j][5]&&a[i][j][5]<='9')
               blue=blue*16+(a[i][j][5]-'0');
               else{blue=blue*16+(a[i][j][5]-'A'+10);}

                 if('0'<=a[i][j][6]&&a[i][j][6]<='9')
               blue=blue*16+(a[i][j][6]-'0');
               else{blue=blue*16+(a[i][j][6]-'A'+10);}


               b[i][j]=(read*11+green*16+blue*5)/32;


              sum+=b[i][j];
              }

        }

         int temp=sum/(w*h);
           temp=(192+2*temp)/3;

      
           for(int i=0;i<w;i++){
                for(int j=0;j<h;j++){
                if(b[i][j]>=temp) cout<<" ";
                else cout<<"9";
                if(j<h-1) cout<<" ";
}
          cout<<endl;
                }

 

}
return 0;}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值