鉴于网络上找不到自己看得懂的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;
}