9 条题解

  • 3
    @ 2024-11-15 23:39:03
    #include <bits/stdc++.h>
    using namespace std;
    int a,b,c[114][114];
    string s[114];
    int main(){
    	cin >> a >> b;
    	for(int i = 0 ; i < a ; i++) cin >> s[i];
    	for(int i = 0 ; i < a ; i++){
    		for(int j = 0 ; j < b ; j++){
    			if(s[i][j] == '*'){
    				c[i][j] = -114514;
    				if(i == 0){
    					if(j == 0) c[i+1][j]++,c[i+1][j+1]++,c[i][j+1]++;
    					else c[i][j-1]++,c[i+1][j-1]++,c[i+1][j]++,c[i+1][j+1]++,c[i][j+1]++;
    				}
    				else{
    					if(j == 0) c[i-1][j]++,c[i-1][j+1]++,c[i+1][j]++,c[i+1][j+1]++,c[i][j+1]++;
    					else c[i-1][j-1]++,c[i][j-1]++,c[i+1][j-1]++,c[i+1][j]++,c[i+1][j+1]++,c[i][j+1]++,c[i-1][j]++,c[i-1][j+1]++;
    				}
    			}
    		}
    	}
    	for(int i = 0 ; i < a ; i++){
    		for(int j = 0 ; j < b ; j++){
    			if(c[i][j] < 0) cout << "*";
    			else cout << c[i][j];
    		}
    		cout << endl;
    	}
    	return 0;
    }
    
    • 1
      @ 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

        😕 😄

    • 1
      @ 2023-11-19 16:57:37
      #include<iostream>
      using namespace std;
      int ans[105][105];
      int main()
      {
      	int n,m;
      	cin>>n>>m;
      	for(int i=1;i<=n;i++)
      	{
      		for(int j=1;j<=m;j++)
      		{
      			char str;
      			cin>>str;
      			if(str=='*') ans[i][j]=1;
      			else ans[i][j]=0;
      		}
      	}
      	for(int i=1;i<=n;i++)
      	{
      		for(int j=1;j<=m;j++)
      		{
      			int sum=0;
      			if(ans[i][j]==1) cout<<'*';
      			else
      			{
      				if(ans[i][j+1]==1) sum++;
      				if(ans[i][j-1]==1) sum++;
      				if(ans[i-1][j]==1) sum++;
      				if(ans[i+1][j]==1) sum++;
      				if(ans[i+1][j+1]==1) sum++;
      				if(ans[i+1][j-1]==1) sum++;
      				if(ans[i-1][j+1]==1) sum++;
      				if(ans[i-1][j-1]==1) sum++;
      				cout<<sum;
      			}
      		}
      		cout<<endl;
      	}
      	return 0;
      }
      
    • 1
      @ 2022-9-17 16:00:09

      _

      #include <math.h>
      
      #include <stack>
      
      #include <stdio.h>
      
      #include <iostream>
      
      #include <vector>
      
      #include <iomanip>
      
      #include <string.h>
      
      #include <algorithm>
      
      using namespace std;
      
      #define LL long long
      
      const int N = 1e5 + 10;
      
      const int INF = 0x3f3f3f3f;
      
      char a[110][110];
      
      int dx[] = {1,1,1,-1,-1,-1,0,0};
      
      int dy[] = {0,1,-1,0,1,-1,1,-1};
      
      int main()
      
      {
      
          int n,m;
      
          cin >> n >> m;
      
          for(int i = 0; i < n; i++)
      
              cin >> a[i];
      
          for(int i = 0; i < n; i++)
      
          {
      
              for(int j = 0; j < m; j++)
      
              {
      
                  int num = 0;
      
                  if(a[i][j] == '*')
      
                      cout << "*";
      
                  else
      
                  {
      
                      for(int k = 0; k < 8; k++)
      
                      {
      
                          int x = i + dx[k];
      
                          int y = j + dy[k];
      
                          if(x < 0 && y < 0 && x >= n && y >= m)
      
                              continue;
      
                          if(a[x][y] == '*')
      
                              num++;
      
                      }
      
                      cout << num;
      
                  }
      
              }
      
              cout << endl;
      
          }
      
      }
      
      • 0
        @ 2023-11-27 17:50:49

        不知道

      • 0
        @ 2022-9-12 10:55:42
        #include<iostream>
        #include<string.h>
        using namespace std;
        int ans[105][105];
        int main()
        {
        	int n,m;
        	cin>>n>>m;
        	for(int i=1;i<=n;i++)
        	{
        		for(int j=1;j<=m;j++)
        		{
        			char str;
        			cin>>str;
        			if(str=='*') ans[i][j]=1;
        			else ans[i][j]=0;
        		}
        	}
        	for(int i=1;i<=n;i++)
        	{
        		for(int j=1;j<=m;j++)
        		{
        			int sum=0;
        			if(ans[i][j]==1) cout<<'*';
        			else
        			{
        				if(ans[i][j+1]==1) sum++;
        				if(ans[i][j-1]==1) sum++;
        				if(ans[i-1][j]==1) sum++;
        				if(ans[i+1][j]==1) sum++;
        				if(ans[i+1][j+1]==1) sum++;
        				if(ans[i+1][j-1]==1) sum++;
        				if(ans[i-1][j+1]==1) sum++;
        				if(ans[i-1][j-1]==1) sum++;
        				cout<<sum;
        			}
        		}
        		cout<<endl;
        	}
        	return 0;
        }
        
        • 0
          @ 2022-2-26 10:42:37
          #include <math.h>
          #include <stack>
          #include <stdio.h>
          #include <iostream>
          #include <vector>
          #include <iomanip>
          #include <string.h>
          #include <algorithm>
          using namespace std;
          #define LL long long
          const int N = 1e5 + 10;
          const int INF = 0x3f3f3f3f;
          char a[110][110];
          int dx[] = {1,1,1,-1,-1,-1,0,0};
          int dy[] = {0,1,-1,0,1,-1,1,-1};
          int main()
          {
              int n,m;
              cin >> n >> m;
              for(int i = 0; i < n; i++)
                  cin >> a[i];
              for(int i = 0; i < n; i++)
              {
                  for(int j = 0; j < m; j++)
                  {
                      int num = 0;
                      if(a[i][j] == '*')
                          cout << "*";
                      else
                      {
                          for(int k = 0; k < 8; k++)
                          {
                              int x = i + dx[k];
                              int y = j + dy[k];
                              if(x < 0 || y < 0 || x >= n || y >= m)
                                  continue;
                              if(a[x][y] == '*')
                                  num++;
                          }
                          cout << num;
                      }
                  }
                  cout << endl;
              }
              return 0;
          }
          
        • 0
          @ 2022-1-25 10:22:51
          #include <math.h>
          #include <stack>
          #include <stdio.h>
          #include <iostream>
          #include <vector>
          #include <iomanip>
          #include <string.h>
          #include <algorithm>
          using namespace std;
          #define LL long long
          const int N = 1e5 + 10;
          const int INF = 0x3f3f3f3f;
          char a[110][110];
          int dx[] = {1,1,1,-1,-1,-1,0,0};
          int dy[] = {0,1,-1,0,1,-1,1,-1};
          int main()
          {
              int n,m;
              cin >> n >> m;
              for(int i = 0; i < n; i++)
                  cin >> a[i];
              for(int i = 0; i < n; i++)
              {
                  for(int j = 0; j < m; j++)
                  {
                      int num = 0;
                      if(a[i][j] == '*')
                          cout << "*";
                      else
                      {
                          for(int k = 0; k < 8; k++)
                          {
                              int x = i + dx[k];
                              int y = j + dy[k];
                              if(x < 0 || y < 0 || x >= n || y >= m)
                                  continue;
                              if(a[x][y] == '*')
                                  num++;
                          }
                          cout << num;
                      }
                  }
                  cout << endl;
              }
              return 0;
          }```
          • -1
            @ 2022-11-5 0:38:04

            牛逼o( ̄▽ ̄)d

            • 1

            信息

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