XDOJ字符串数组 灰度直方图

时间:2025-03-25 10:25:17

XDOJ - 灰度直方图

类别:数组
时间限制:2S
内存限制:1000Kb
问题描述
一幅m×n的灰度图像可以用一个二维矩阵表示,矩阵中的每个元素表示对应像素的灰度值。
灰度直方图表示图像中具有每种灰度级的象素的个数,反映图像中每种灰度出现的频率。
假设图像灰度为16级(灰度值从0-15),现给出一个矩阵表示的灰度图像,输出各级灰度的像素个数。
输入说明
输入数据第一行为两个整数m 和n分别表示图像的宽度和高度(0<=m,n<=256),其后是n行数据,每行m个整数,分别表示图像各个像素的灰度值。
输出说明
输出n行数据,每行数据由两个整数组成,分别表示灰度级和该灰度级像素个数,整数之间用空格分隔,灰度级输出顺序为从低到高,
如果某灰度级像素个数为0,则不输出该灰度级的统计结果。
输入样例
5 4
0 1 0 2 8
3 4 8 5 9
12 14 10 6 7
1 15 3 6 10
输出样例
0 2
1 2
2 1
3 2
4 1
5 1
6 2
7 1
8 2
9 1
10 2
12 1
14 1
15 1

#include<>
int main()
{
	int a[256][256],b[16]={0},m,n,i,j,l;
	scanf("%d%d",&m,&n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			scanf("%d",&a[i][j]);
			switch(a[i][j])
			{
				case 0:b[0]=b[0]+1;break;
				case 1:b[1]=b[1]+1;break;
				case 2:b[2]=b[2]+1;break;
				case 3:b[3]=b[3]+1;break;
				case 4:b[4]=b[4]+1;break;
				case 5:b[5]=b[5]+1;break;
				case 6:b[6]=b[6]+1;break;
				case 7:b[7]=b[7]+1;break;
				case 8:b[8]=b[8]+1;break;
				case 9:b[9]=b[9]+1;break;
				case 10:b[10]=b[10]+1;break;
				case 11:b[11]=b[11]+1;break;
				case 12:b[12]=b[12]+1;break;
				case 13:b[13]=b[13]+1;break;
				case 14:b[14]=b[14]+1;break;
				case 15:b[15]=b[15]+1;break;
			}
		}
	}
	for(l=0;l<16;l++)
	{
		if(b[l]==0) continue;
		else printf("%d %d\n",l,b[l]);
	}	
	return 0;
 }