#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
的出现次数时遇到麻烦。请帮忙
最佳答案
您的代码中有两个不同的问题。
第一:
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++;
}
关于c - 计算C中2D字符数组中字符出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51250240/