测试数据对,提交之后wrong answer,哪错了

题目描述
在一个偏远的山区,电信部门要去调研那里的信号覆盖情况,
经过扫描得到山区的信号塔分布情况矩形图,矩形图图由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;
}



可能是最后多了一个换行符吧。
最后输出的for循环中,如果i为9,则printf("%d",k[i]);
另外55行的for循环应该去掉,题目并没有要求你输出这个矩阵数据啊
先把55行的for循环删除看看是否OK,如果不OK,再修改最后的for循环。

#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<10;i++)
    {
        if(i!=0)
            printf("\n");
        printf("%d",k[i]);
    }
    return 0;
}
 
 

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632