#include<stdio.h>
#include <stdlib.h>
int main()
{
char a[100][100],ch;
int b[100][100],i,j,k,n,x,y,count,l,m;
count=0;
scanf("%d",&n);/*Number of lines of input to be read*/
for(i=0;i<n;i++)/*To read the input*/
{
scanf("%s",a[i]);
}
for(i=0;i<n;i++) /*To separate the blast radius from char array a*/
for(j=0;j<n;j++)
{
if(a[i][j]!='P'&&a[i][j]!='p'&&a[i][j]!='*')
b[i][j]=a[i][j]-'0';
else
b[i][j]=0;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(b[i][j]!=0)
{
k=b[i][j];
for(x=i-k;x<=i+k;x++)
for(y=j-k;y<=j+k;y++)
a[x][y]='X';
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
a[i][j]=ch;
if(ch=='p')
count++;
}
printf("%d",count);
}
输入如下
6
p *
**** p *
* p * 1 **
***** p
*** p * p
*** pp2
爆炸后,网格变为(X
是爆炸区域)
p *
** XXX *
pX1X
** XXXX
*** XXX
*** XX2
在查找最终数组中p
的出现次数时遇到麻烦。请帮助
答案 0 :(得分:0)
您的代码中有两个不同的问题。
第一个:
k=b[i][j];
for(x=i-k;x<=i+k;x++)
for(y=j-k;y<=j+k;y++)
a[x][y]='X';
在这里,您需要进行边界检查,以确保您不写数组之外。例如,如果炸弹放在(0,0)i-k
上将为负。
边界检查:
for(x=i-k;x<=i+k;x++)
for(y=j-k;y<=j+k;y++)
if(x>=0 && x<n && y>=0 && y<n)
a[x][y]='X';
第二个问题:
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
a[i][j]=ch;
if(ch=='p')
count++;
}
在这里,您将a
的每个元素设置为ch
,而这些元素尚未初始化。我认为您想直接比较a
和'p'
的元素。
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i][j]=='p' || a[i][j]=='P')
count++;
}