1 条题解

  • 0
    @ 2025-4-12 21:43:14

    C :

    #include<stdio.h>
    #include<math.h>
    
    #define N 200
    
    
    void fun(char* s, int *red, int *green, int *blue)
    {
    	int  t; 
    	for (int i = 0; s[i]; i++) 
    	{ 
    		if (i>= 1 && i <= 2)
    		{
    			if (s[i] <= '9')
    				t = s[i] - '0';
    			else t = s[i] - 'A' + 10;
    			*red = *red * 16 + t;
    		}
    		if (i<=4 && i>2)
    		{
    			if (s[i] <= '9')
    				t = s[i] - '0';
    			else t = s[i] - 'A' + 10;
    			*green = *green * 16 + t;
    		}
    		if (i<=6 && i>4)
    		{
    			if (s[i] <= '9')
    				t = s[i] - '0';
    			else t = s[i] - 'A' + 10;
    			*blue = *blue * 16 + t;
    		}
    		
    	}
    }
    
    float huiduzhi(int red,int green,int blue)
    {
    	float huiduzhi;
    	huiduzhi = (11 * red + 16 * green + 5 * blue) / 32;
    	return huiduzhi;
    }
    
    char a[N][N][N];
    
    int main()
    {
    	int i, j, w, h, hdz[N][N];
    	while (scanf("%dx%d", &w, &h) != EOF)
    	{
    		for (i = 0; i < h; i++)
    		for (j = 0; j < w; j++)
    		{
    			scanf("%s", a[i][j]);
    		}
    		int sum = 0;
    		for (i = 0; i < h; i++)
    		{
    			for (j = 0; j < w; j++)
    			{
    				int red = 0, green = 0, blue = 0;
    				fun(a[i][j], &red, &green, &blue);
    				hdz[i][j] = huiduzhi(red, green, blue);
    			}
    		}
    		for (i = 0; i < h; i++)
    		for (j = 0; j < w; j++)
    			sum = sum + hdz[i][j];
    		float yuzhi;
    		yuzhi = (192 + 2 * (sum / (w*h))) / 3;
    		printf("%dx%d\n", w, h);
    		for (i = 0; i < h; i++)
    		{
    			for (j = 0; j < w; j++)
    			{
    				if (hdz[i][j] < yuzhi)
    				{
    					if (j != w-1)
    						printf("9 ");
    					else
    						printf("9");
    				}
    				else
    				{
    					if (j != w-1)
    						printf("  ");
    					else
    						printf(" ");
    				}
    			}
    			printf("\n");
    		}
    	}
    	return 0;
    }
    

    C++ :

    #include <stdio.h>
    int main ()
    {
    	int w, h, i, j;
    	int a[500];
    	int map[301][301];
    	char c, str[20];
    
    	for(i = 0 ; i < 11 ; i ++)
    	{
    		a['0' + i] = i;
    		a['A' + i] = 10 + i;
    	}
    	while(scanf("%d%c%d",&w,&c,&h) != EOF)
    	{
    		int sum = 0;
    		for(i = 0 ; i < h ; i ++)
    		{
    			for(j = 0 ; j < w ; j ++)
    			{
    				scanf("%s",str);
    				int r = a[(int)str[1]] * 16 + a[(int)str[2]];
    				int g = a[(int)str[3]] * 16 + a[(int)str[4]];
    				int b = a[(int)str[5]] * 16 + a[(int)str[6]];
    				map[i][j] = (11 * r + 16 * g + 5 * b) / 32;
    				sum += map[i][j];
    			}
    		}
    		
    		int average_grayscale = sum / (w * h);
    		int formala = (192 + 2 * average_grayscale) / 3;
    		printf("%dx%d\n",w,h);
    		for(i = 0 ; i < h ; i ++)
    		{
    			for(j = 0 ; j < w ; j ++)
    			{
    				if(j)
    					printf(" ");
    				if(map[i][j] < formala)
    					printf("9");
    				else
    					printf(" ");
    				
    			}
    			printf("\n");
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1333
    时间
    5000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者