大炮打蚊子(C++)

大炮打蚊子 

现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格。向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意:

 O
OXO
 O

其中,X为炮弹落点中心,O为紧靠中心的四个有杀伤力的格子范围。若蚊子被炮弹命中(位于X格),一击毙命,若仅被杀伤(位于O格),则损失一半的生命力。也就是说,一次命中或者两次杀伤均可消灭蚊子。现在给出蚊子的分布情况以及连续k发炮弹的落点,给出每炮消灭的蚊子数。

输入格式:

第一行为两个不超过20的正整数MN,中间空一格,表示二维平面有M行、N列。

接下来M行,每行有N0或者#字符,其中#表示所在格子有蚊子。

接下来一行,包含一个不超过400的正整数k,表示发射炮弹的数量。

最后k行,每行包括一发炮弹的整数坐标xy(0≤x<M,0≤y<N),之间用一个空格间隔。

输出格式:

对应输入的k发炮弹,输出共有k行,第i行即第i发炮弹消灭的蚊子数。

输入样例:

5 6
00#00#
000###
00#000
000000
00#000
2
1 2
1 4

输出样例:

0
2

这题我用的是C++,骚话少说 上代码:

#include <bits/stdc++.h>
using namespace std;
//讲个笑话 老师叫我们写的这题叫做高射炮打蚊子
int main()
{
    ios::sync_with_stdio(false);    //取消cin和stdin的同步
    int M, N;   //M行N列
    cin >> M >> N;
    int a[M][N];    //用字符型二维数组来模拟一个二维平面
    for(int i=0;i<M;i++)
    {
        for(int j=0;j<N;j++)
        {
            char temp;
            cin >> temp;
            if(temp=='0')
            {
                a[i][j] = 0;
            }
            else    //直接把#号变成2,因为蚊子有复活甲,它有2条命
            {
                a[i][j] = 2;  //表示蚊子满血
            }
        }
    }

    int k;      //发射炮弹的数量k
    cin >> k;
    int x, y;    //发射炮弹的整数坐标
    for(int i=0;i<k;i++)
    {
        cin >> x >> y;
        int num =0;   //用来记录炮弹消灭的蚊子数
        if(a[x][y]>0)
        {
            a[x][y] = 0;    //正中目标,一击毙命
            num++;
        }
        if(x-1>=0)  //左方
        {
            if(a[x-1][y]!=0)
            {
                a[x-1][y]--;   //表示蚊子少了半条命
                if(a[x-1][y]==0)
                {
                    num++;  
                }
            }
        }
        if(x+1!=M)  //右方
        {
            if(a[x+1][y]!=0)
            {
                a[x+1][y]--;
                 if(a[x+1][y]==0)
                {
                    num++;
                }
            }
        }
        if(y-1>=0)  //上方
        {
            if(a[x][y-1]!=0)
            {
                a[x][y-1]--;
                if(a[x][y-1]==0)
                {
                    num++;
                }
            }
        }
        if(y+1!=N)  //下方
        {
            if(a[x][y+1]!=0)
            {
                a[x][y+1]--;
                 if(a[x][y+1]==0)
                {
                    num++;
                }
            }
        }
        cout << num<< endl;
    }
/*
    嘤嘤嘤 我偷偷查看了一下输出后的二维矩阵
    for(int i=0;i<M;i++)
    {
        for(int j=0;j<N;j++)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
*/
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42449444/article/details/83349077