AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,k,map[105][105]={0},a,b,c,d,ans=0;
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=m;i++){
scanf("%d %d",&a,&b);
map[a][b+2]=1;
map[a][b+1]=1;
map[a][b]=1;
map[a][b-1]=1;
map[a][b-2]=1;
map[a-2][b]=1;
map[a-1][b]=1;
map[a+1][b]=1;
map[a+2][b]=1;
map[a-1][b-1]=1;
map[a-1][b+1]=1;
map[a+1][b-1]=1;
map[a+1][b+1]=1;
}
for(int i=1;i<=k;i++){
scanf("%d %d",&c,&d);
map[c][d+2]=1;
map[c][d+1]=1;
map[c][d]=1;
map[c][d-1]=1;
map[c][d-2]=1;
map[c-1][d]=1;
map[c-1][d-2]=1;
map[c-1][d-1]=1;
map[c-1][d+1]=1;
map[c-1][d+2]=1;
map[c-2][d]=1;
map[c-2][d-2]=1;
map[c-2][d-1]=1;
map[c-2][d+1]=1;
map[c-2][d+2]=1;
map[c+1][d]=1;
map[c+1][d-2]=1;
map[c+1][d-1]=1;
map[c+1][d+2]=1;
map[c+1][d+1]=1;
map[c+2][d]=1;
map[c+2][d-2]=1;
map[c+2][d-1]=1;
map[c+2][d+1]=1;
map[c+2][d+2]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(map[i][j]==0) ans++;
}
}
printf("%d",ans);
return 0;
}
80分代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,k,map[105][105]={0},a,b,c,d,ans=0;
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=m;i++){
scanf("%d %d",&a,&b);
map[a][b+2]=1;
map[a][b+1]=1;
map[a][b]=1;
map[a][b-1]=1;
map[a][b-2]=1;
map[a-2][b]=1;
map[a-1][b]=1;
map[a+1][b]=1;
map[a+2][b]=1;
map[a-1][b-1]=1;
map[a-1][b+1]=1;
map[a+1][b-1]=1;
map[a+1][b+1]=1;
}
for(int i=1;i<=k;i++){
scanf("%d %d",&c,&d);
map[c][d+2]=1;
map[c][d+1]=1;
map[c][d]=1;
map[c][d-1]=1;
map[c][d-2]=1;
map[c-1][d]=1;
map[c-1][d-2]=1;
map[c-1][d-1]=1;
map[c-1][d+1]=1;
map[c-1][d+2]=1;
map[c-2][d]=1;
map[c-2][d-2]=1;
map[c-2][d-1]=1;
map[c-2][d+1]=1;
map[c-2][d+2]=1;
map[c+1][d]=1;
map[c+1][d-2]=1;
map[c+1][d-1]=1;
map[c+1][d+2]=1;
map[c+1][d+1]=1;
map[c+2][d]=1;
map[c+2][d-2]=1;
map[c+2][d-1]=1;
map[c+2][d+1]=1;
map[c+2][d+2]=1;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(map[i][j]==0) ans++;
}
}
printf("%d",ans);
return 0;
}
最终输出时,为什么遍历二维数组时i和j都从1开始至小于等于n能AC,但是i和j从0开始至小于n就只能80?
想不明白为什么,求解答