主函数中输入的变量q好像没有传给子函数,导致可以询问无限次……
请问怎么在只改动子函数的条件下对代码进行改动啊……
#include
void work(int mp[][210],int q);
int main(){
int mp[210][210];
int n,m,q,i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
scanf("%d",&mp[i][j]);
}
}
scanf("%d",&q);
work(mp,q);
}
void work(int mp[][210],int q)
{
int count = 0,i,j,x,y;
for(i = 1;i < q;i++)
{
count = 0;
scanf("%d %d",&x,&y);
if(mp[x][y] == 1)
{
printf("Boom!\n");
}
if(mp[x][y] != 1)
{
for(i = x - 1;i <= x + 1;i++)
{
for(j = y - 1;j <= y + 1;j++)
{
if(mp[i][j] == 1)
count++;
}
}
printf("%d\n",count);
}
}
}
给出一个n∗m大小的网格,坐标从(1,1)开始,在这个网格中每个格子会有一个数字0或者1。0代表这是一个安全区域,1代表这个位置存在一个地雷,接下来我们给出q次询问,每次询问一个坐标(x,y),如果这个位置是一个地雷,那么输出Boom!,如果是一个安全区域,请你输出以他为中心的一个3*3区域内地雷的个数
下方主程序已经编写完成,请参照主函数,编写无返回值的work函数,C语言提交时仅提交work函数
#include
void work(int mp[][210],int q);
int main(){
int mp[210][210];
int n,m,q,i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
scanf("%d",&mp[i][j]);
}
}
scanf("%d",&q);
work(mp,q);
}
输入格式:
第一行输出n,m(0
接下来输入一个q(0
接下来q行每一行输入两个数字 x,y(0
对于每次询问输出Boom!或者周围地雷数量
输入样例:
3 3
1 0 1
0 1 0
1 0 1
9
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
输出样例:
Boom!
3
Boom!
3
Boom!
3
Boom!
3
Boom!
for(i = x - 1;i <= x + 1;i++) 这里改变了最顶层的i。换个变量名
3*3区域内地雷的个数,还需要判断是不是在边界
在C语言当中,没有什么是全局变量不能传递的
for(i = 1;i < q;i++)
for(i = x - 1;i <= x + 1;i++)
内层循环使用了外层循环的循环变量,典型死循环