0
点赞
收藏
分享

微信扫一扫

大炮打蚊子 (15 分)(二维数组训练)

Xin_So 2022-03-13 阅读 61
c语言

鉴于网络上找不到自己看得懂的c语言代码,我打算自己发一下,希望可以帮助更多朋友

题目内容:

 样例:

参考代码:

PS:先看主函数注释再看自定义函数注释 

#include<stdio.h>

int AOE(char *msqt,int r,int c,int n)//AOE取自魔兽争霸范围伤害(area of effect)
{
    int cnt = 0;
    if (msqt[r * n + c] == '#')//判定击杀点周围是否有蚊子

        msqt[r * n + c]--;//有则askii码值减一,代表扣一半血量

    else if (*(msqt + r * n + c) < '0')//判定击杀点周围是否有残血蚊子(减一的“#”)
    {
        msqt[r * n + c] = '0';//有则干碎(asill码化为数字“0”)

        cnt++;//击杀数加一
    }
    return cnt;
}

int main()
{
    int m, n;
    scanf("%d%d", &m, &n);
    char msqt[m][n];//取自蚊子英文“mosquito”
    int i;
    for (i = 0; i < m;i++)
        scanf("%s", msqt[i]);//虽然%s录入的字符串会在行末加“/0”,

                             //但是已经超过数组最大限制了,所以“/0”并没有录入数组

    int k;
    scanf("%d", &k);

    while(k--)//循环k轮结束
    {
        int r, c;//r为行(row),c为列(column)
        scanf("%d%d", &r, &c);

        int cnt = 0;//cnt用于记录每发炮弹kill的蚊子

        if(msqt[r][c]<'0')//“#”的askii码值小于数字“0”
        {
            msqt[r][c] = '0';
            cnt++;
        }

        if(0<r)
            cnt += AOE(msqt[0], r - 1, c, n);
 
        if(r<m-1) 
            cnt += AOE(*msqt, r + 1, c, n);

        if(0<c)
            cnt += AOE(*msqt, r, c - 1, n);

        if(c<n-1)
            cnt += AOE(*msqt, r, c + 1, n);//这里的4个if分别对应四个周围杀伤点位

        printf("%d\n", cnt);
    }
    return 0;
}
举报

相关推荐

0 条评论