为什么用循环不对?
查看原帖
为什么用循环不对?
468109
Darmin楼主2021/1/30 09:50

想问一下为什么我用循环标记亮的地方不对 代码如下:

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
    int n,m,k,i,j,o,p,q,s,ans=0;
    cin>>n>>m>>k;
    int map[n+5][n+5];
    memset(map,0,sizeof(map));
    for(i=1;i<=m;i++){
        cin>>o>>p;
       	for (j = o - 2; j <= o + 2;j++)
            map[j][p] =1;
        for (j = p - 2; j <= p + 2;j++)
            map[o][j] = 1;
        map[o - 1][p - 1] = map[o + 1][p + 1] = map[o - 1][p + 1] = map[o + 1][p - 1] = 1;
    }
    
     for (i = 0; i < k;i++){
        cin >> q >> s;
        for (int j = q - 2; j <= q + 2;j++){
            for (int l = s - 2; l <= s - 2;l++){
                map[j][l] = 1;
            }
        }
    }
    
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            if(map[i][j]==0)ans++;
        }
    }
    cout<<ans;
    return 0;
}

题解里面有一个大佬也是用暴力模拟,只是他标记的那部分我用循环来完成,为什么就是不对呢? 这个是那个大佬的代码:

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>//写这么多头文件确实没必要
using namespace std;
int main(){
    int n,m,k,i,j,o,p,q,s,ans=0;
    cin>>n>>m>>k;
    int map[n+5][n+5];
    memset(map,0,sizeof(map));
    for(i=1;i<=m;i++){
        cin>>o>>p;
        map[o+2][p]=1;//一个一个找,一个一个亮,暴力时,一定要有顺序,
        map[o][p+2]=1;
        map[o-2][p]=1;
        map[o][p-2]=1;
        map[o+1][p]=1;
        map[o+1][p+1]=1;
        map[o+1][p-1]=1;
        map[o][p+1]=1;
        map[o][p]=1;
        map[o][p-1]=1;
        map[o-1][p]=1;
        map[o-1][p+1]=1;
        map[o-1][p-1]=1;
    }
    for(i=1;i<=k;i++){
        cin>>q>>s;
        map[q-2][s-2]=1;
        map[q-2][s-1]=1;
        map[q-2][s]=1;
        map[q-2][s+1]=1;
        map[q-2][s+2]=1;
        map[q-1][s-2]=1;
        map[q-1][s-1]=1;
        map[q-1][s]=1;
        map[q-1][s+1]=1;
        map[q-1][s+2]=1;
        map[q][s-2]=1;
        map[q][s-1]=1;
        map[q][s]=1;
        map[q][s+1]=1;
        map[q][s+2]=1;
        map[q+1][s-2]=1;
        map[q+1][s-1]=1;
        map[q+1][s]=1;
        map[q+1][s+1]=1;
        map[q+1][s+2]=1;
        map[q+2][s-2]=1;
        map[q+2][s-1]=1;
        map[q+2][s]=1;
        map[q+2][s+1]=1;
        map[q+2][s+2]=1;
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            if(map[i][j]==0)ans++;
        }
    }
    cout<<ans;//搞定
    return 0;
}
2021/1/30 09:50
加载中...