菠萝萝球球 2022-03-03 11:10 采纳率: 100%
浏览 43
已结题

测试数据对,提交之后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;
}



  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-03 11:17
    关注

    可能是最后多了一个换行符吧。
    最后输出的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;
    }
     
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 已采纳回答 3月3日
  • 创建了问题 3月3日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度