题目描述
在一个偏远的山区,电信部门要去调研那里的信号覆盖情况,
经过扫描得到山区的信号塔分布情况矩形图,矩形图图由0和1组成,
1表示信号塔,0表示非信号塔。
每一个信号塔可以使它周围和自己所在共9个区域的信号强度加1,
他们想快速知道信号强度为0~9的区域各有多少块,0表示没有信号。
他们向大学问,你能用程序为他们解决吗?
输入要求
第一行两个小于等于20的非负整数m、n,表示矩形图的行数和列数。
接下来m行每行n个整数表示第m行n列所在位置是信号塔或非信号塔。
输出要求
输出信号强度为0~9的区域各有多少块,共10行。
输入样例
11 10
1 1 0 0 1 0 1 1 0 1
0 0 0 0 0 0 1 1 0 1
0 1 1 1 0 0 1 1 1 1
0 1 0 1 0 0 1 0 0 0
1 1 1 0 1 1 0 1 1 0
1 1 0 0 0 0 1 0 1 0
1 1 1 0 0 0 1 1 0 1
1 0 1 0 0 1 1 1 0 0
0 0 0 0 1 0 1 0 1 0
0 1 1 1 0 0 0 1 1 0
0 1 0 1 0 1 1 1 1 1
输出样例
0
4
17
22
27
21
13
5
1
0
#include<stdio.h>
int main()
{
int a[20][20],b[20][20]={0},k[10]={0},i,j;
int m,n;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]==1)
{
b[i][j]++;
if((j-1)>-1&&(i-1)>-1&&(j-1)<n&&(i-1)<m)
b[i-1][j-1]++;
if((i-1)>-1&&j>-1&&(i-1)<m&&j<n)
b[i-1][j]++;
if((i-1)>-1&&(j+1)>-1&&(i-1)<m&&(j+1)<n)
b[i-1][j+1]++;
if(i>-1&&(j-1)>-1&&i<m&&(j-1)<n)
b[i][j-1]++;
if(i>-1&&(j+1)>-1&&i<m&&(j+1)<n)
b[i][j+1]++;
if((i+1)>-1&&(j-1)>-1&&(i+1)<m&&(j-1)<n)
b[i+1][j-1]++;
if((i+1)>-1&&j>-1&&(i+1)<m&&j<n)
b[i+1][j]++;
if((i+1)>-1&&(j+1)>-1&&(i+1)<m&&(j+1)<n)
b[i+1][j+1]++;
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(b[i][j]==0)
k[0]++;
if(b[i][j]==1)
k[1]++;
if(b[i][j]==2)
k[2]++;
if(b[i][j]==3)
k[3]++;
if(b[i][j]==4)
k[4]++;
if(b[i][j]==5)
k[5]++;
if(b[i][j]==6)
k[6]++;
if(b[i][j]==7)
k[7]++;
if(b[i][j]==8)
k[8]++;
if(b[i][j]==9)
k[9]++;
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
for(i=0;i<10;i++)
{
printf("%d\n",k[i]);
}
return 0;
}