10 条题解

  • 0
    @ 2023-11-19 17:04:59

    题目传送门

    这道是个字符串的题,有许多人在刚开始做这道题的时候都会想着把角,边,中三个区域分别讨论(我刚开始就是这么想的),可是这样既复杂又容易出错。 我们完全可以先把整个地图给加一个边框,也就是我们把边框上的每一个点令其为'?',这样遍历n×mn\times m的表格的时候不管这个点是四个角还是边上的,都可以直接判断周围的八个点。否则就会判断到周围有一个点是''(也就是啥都没有)。


    我们在遍历的时候i,ji,j都得从1开始遍历,要给边框留下1的宽度。每次遍历完一个点pp都得清零。


    代码就将就看看吧:

    #include<bits/stdc++.h>
    #define endl '\n'
    using namespace std;
    const int N = 105;
    char a[N][N];
    int p=0,n,m;
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cout.tie(0);
    	cin>>n>>m;
    	for(int i=1; i<=n; i++) {
    		for(int j=1; j<=m; j++) {
    			cin>>a[i][j];
    		}
    	}
    	for(int i=0; i<=n+1; i++) {
    		a[0][i]='?';
    	}
    	for(int i=0; i<=n+1; i++) {
    		a[n+1][i]='?';
    	}
    	for(int j=0; j<=m+1; j++) {
    		a[j][0]='?';
    	}
    	for(int j=0; j<=m+1; j++) {
    		a[j][m+1]='?';
    	}
    	for(int i=1; i<=n; i++) {
    		for(int j=1; j<=m; j++) {
    			if(a[i][j]=='?') {
    				if(a[i-1][j]=='*')p++;
    				if(a[i+1][j]=='*')p++;
    				if(a[i][j+1]=='*')p++;
    				if(a[i][j-1]=='*')p++;
    				if(a[i-1][j-1]=='*')p++;
    				if(a[i-1][j+1]=='*')p++;
    				if(a[i+1][j-1]=='*')p++;
    				if(a[i+1][j+1]=='*')p++;
    				cout<<p;
    				p=0;
    				continue;
    			}
    			cout<<a[i][j];
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    
    • @ 2023-11-19 17:06:28

      真心劝那些洛谷,csdn抄题解的Oiers别再发了

    • @ 2023-11-20 17:14:11

      完了我发现加不加边框这道题都可以对ovo

      #include<bits/stdc++.h>
      #define endl '\n'
      using namespace std;
      const int N = 105;
      char a[N][N];
      int p=0,n,m;
      int main() {
      	ios::sync_with_stdio(false);
      	cin.tie(0);
      	cout.tie(0);
      	cin>>n>>m;
      	for(int i=1; i<=n; i++) {
      		for(int j=1; j<=m; j++) {
      			cin>>a[i][j];
      		}
      	}
      	for(int i=1; i<=n; i++) {
      		for(int j=1; j<=m; j++) {
      			if(a[i][j]=='?') {
      				if(a[i-1][j]=='*')p++;
      				if(a[i+1][j]=='*')p++;
      				if(a[i][j+1]=='*')p++;
      				if(a[i][j-1]=='*')p++;
      				if(a[i-1][j-1]=='*')p++;
      				if(a[i-1][j+1]=='*')p++;
      				if(a[i+1][j-1]=='*')p++;
      				if(a[i+1][j+1]=='*')p++;
      				cout<<p;
      				p=0;
      				continue;
      			}
      			cout<<a[i][j];
      		}
      		cout<<endl;
      	}
      	return 0;
      }
      
    • @ 2024-12-1 20:45:03

      😕 😄

信息

ID
749
时间
1000ms
内存
256MiB
难度
4
标签
递交数
347
已通过
154
上传者