10 条题解

  • 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
        @ 2024-12-29 18:26:15

        #include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <math.h> #include <stdio.h> #include <algorithm> #include <string.h> #include <queue> #include <stack> #include <iomanip> #include <vector> using namespace std; char a[105][105]; int dx[] = {1,1,1,0,0,-1,-1,-1}; int dy[] = {0,1,-1,1,-1,0,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++) { if(a[i][j] == '') cout << ""; else { int sum = 0; 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] == '*') sum++;

        }
        			cout << sum;
        		}
        	}
        	cout << endl;
        }
        
        return 0;
        

        }

        • 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
              标签
              递交数
              338
              已通过
              148
              上传者