纯萌新提问,劳驾洛谷各路大神拨冗解答!万分感谢!
先看一段20分代码,只过了#2#3两个点:
#include<cstdio>
using namespace std;
int n,m;
char c;
int x;
bool a[1000][1000]={0};
int main() {
scanf("%d %d\r\n",&n,&m);
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
c=getchar();
//putchar(c);
switch (c) {
case'*': a[i][j]=1;break;
case'?': a[i][j]=0;break;
}
}
getchar();
getchar();
}
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
if (a[i][j]==1) printf("*"),x=0;
else {
for (int k=i-1;k<=i+1;k++)
for (int t=j-1;t<=j+1;t++)
if (a[k][t]==1) x++;
printf("%d",x);
x=0;
}
}
printf("\r\n");
}
return 0;
}
稍微解释一下。
所以为啥只有20?
再看另一段AC代码:
#include<cstdio>
using namespace std;
int n,m;
char c;
int x;
bool a[1000][1000]={0};
int main() {
scanf("%d %d\r\n",&n,&m);
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
c=getchar();
//putchar(c);
while (!(c=='*'||c=='?'))//仅此处有所改动!
c=getchar();
switch (c) {
case'*': a[i][j]=1;break;
case'?': a[i][j]=0;break;
}
}
}
for (int i=1;i<=n;i++) {
for (int j=1;j<=m;j++) {
if (a[i][j]==1) printf("*"),x=0;
else {
for (int k=i-1;k<=i+1;k++)
for (int t=j-1;t<=j+1;t++)
if (a[k][t]==1) x++;
printf("%d",x);
x=0;
}
}
printf("\r\n");
}
return 0;
}
这是同学指教的,然后莫名其妙就过了。
上述两个代码有何不同?问题出在哪里?求高人指点!
谢谢!!!