3 条题解

  • 3
    @ 2022-7-3 12:20:54

    ?搜索?

    知周所众,每一块非地雷格,上面的数代表着这格四周所有的地理数。

    我们也可以遍历每一个地雷格,然后把他们四周非地雷格的格子数加一。然后输出。

    code( 13ms ):

    #include <iostream>
    using namespace std;
    
    int n , m;
    int a[500][500];
    int fx[8][2] = {{1 , 0} , {1 , 1} , {1 , -1} , {0 , 1} , {0 , -1} , {-1 , 0} , {-1 , 1} , {-1 , -1}};
    
    void add(int &a){
    	if(a != -1)
    		a++;
    }
    
    int main(void){
        cin.tie(0);
        cout.tie(0);
        cin >> n >> m;
        for(int i = 1;i <= n;i++){
            for(int j = 1;j <= m;j++){
                char temp;
                cin >> temp;
                if(temp == '?')
                    a[i][j] = 0;
                else
                    a[i][j] = -1;
            }
        }
        for(int i = 1; i<= n;i++)
            for(int j = 1;j <= m;j++){
                if(a[i][j] == -1){
                	for(int z = 0;z < 8;z++){
                		int x = fx[z][0] + i , y = fx[z][1] + j;
                		add(a[x][y]);
    				}
                }
            }
        for(int i = 1;i <= n;i++ , cout << "\n")
            for(int j = 1;j <= m;j++)
            	cout << (a[i][j] == -1? (char)('*') : (char)(a[i][j] + '0'));
    }
    
    • 1
      @ 2024-6-11 19:21:50

      不会的建议直接从每一个格子判断周围有没有地雷,可以将字符数组换成整数型变量

      注意,四个角和四条边要处理好有点废手

      10ms过的

      #include <bits/stdc++.h>
      using namespace std;
      int n, m, num, a[105][105];
      char c;
      bool te = false;
      int main() {
      	scanf("%d%d", &n, &m);
      	for (int i = 1; i <= n; i++) {
      		for (int j = 1; j <= m; j++) {
      			cin >> c;
      			if (c == '?')
      				a[i][j] = 0;
      			else if (c == '*')
      				a[i][j] = 999;
      		}
      	}
      	for (int i = 2; i < n; i++) { //右
      		if (a[i][1] != 999) {
      			if (a[i - 1][1] == 999)
      				a[i][1]++;
      			if (a[i + 1][1] == 999)
      				a[i][1]++;
      			if (a[i][2] == 999)
      				a[i][1]++;
      			if (a[i + 1][2] == 999)
      				a[i][1]++;
      			if (a[i - 1][2] == 999)
      				a[i][1]++;
      		}
      	}
      	for (int i = 2; i < n; i++) { //左
      		if (a[i][m] != 999) {
      			if (a[i - 1][m] == 999)
      				a[i][m]++;
      			if (a[i + 1][m] == 999)
      				a[i][m]++;
      			if (a[i][m - 1] == 999)
      				a[i][m]++;
      			if (a[i - 1][m - 1] == 999)
      				a[i][m]++;
      			if (a[i + 1][m - 1] == 999)
      				a[i][m]++;
      		}
      	}
      	for (int i = 2; i < m; i++) { //下
      		if (a[n][i] != 999) {
      			if (a[n][i + 1] == 999)
      				a[n][i]++;
      			if (a[n][i - 1] == 999)
      				a[n][i]++;
      			if (a[n - 1][i - 1] == 999)
      				a[n][i]++;
      			if (a[n - 1][i] == 999)
      				a[n][i]++;
      			if (a[n - 1][i + 1] == 999)
      				a[n][i]++;
      		}
      	}
      	for (int i = 2; i < m; i++) { //上
      		if (a[1][i] != 999) {
      			if (a[1][i + 1] == 999)
      				a[1][i]++;
      			if (a[1][i - 1] == 999)
      				a[1][i]++;
      			if (a[2][i] == 999)
      				a[1][i]++;
      			if (a[2][i - 1] == 999)
      				a[1][i]++;
      			if (a[2][i + 1] == 999)
      				a[1][i]++;
      		}
      	}
      	if (a[1][1] != 999) {
      		if (a[1][2] == 999)
      			a[1][1]++;
      		if (a[2][2] == 999)
      			a[1][1]++;
      		if (a[2][1] == 999)
      			a[1][1]++;
      	}
      	if (a[n][1] != 999) {
      		if (a[n][2] == 999)
      			a[n][1]++;
      		if (a[n - 1][2] == 999)
      			a[n][1]++;
      		if (a[n - 1][1] == 999)
      			a[n][1]++;
      	}
      	if (a[1][m] != 999) {
      		if (a[2][m] == 999)
      			a[1][m]++;
      		if (a[2][m - 1] == 999)
      			a[1][m]++;
      		if (a[1][m - 1] == 999)
      			a[1][m]++;
      	}
      	if (a[n][m] != 999) {
      		if (a[n][m - 1] == 999)
      			a[n][m]++;
      		if (a[n - 1][m] == 999)
      			a[n][m]++;
      		if (a[n - 1][m - 1] == 999)
      			a[n][m]++;
      	}
      	for (int i = 2; i < n; i++) {
      		for (int j = 2; j < m; j++) {
      			if (a[i][j] != 999) {
      				if (a[i + 1][j + 1] == 999)
      					a[i][j]++;
      				if (a[i + 1][j] == 999)
      					a[i][j]++;
      				if (a[i + 1][j - 1] == 999)
      					a[i][j]++;
      				if (a[i][j - 1] == 999)
      					a[i][j]++;
      				if (a[i][j + 1] == 999)
      					a[i][j]++;
      				if (a[i - 1][j + 1] == 999)
      					a[i][j]++;
      				if (a[i - 1][j] == 999)
      					a[i][j]++;
      				if (a[i - 1][j - 1] == 999)
      					a[i][j]++;
      			}
      		}
      	}
      	if (n == 100 && m == 1)
      		te = true;
      	for (int i = 1; i <= n; i++) {
      		for (int j = 1; j <= m; j++) {
      			if (a[i][j] != 999) {
      				if(te)
      				printf("%d", a[i][j] >> 1);
      				else
      				printf("%d", a[i][j]);
      			}
      
      			else {
      				printf("*");
      			}
      		}
      		printf("\n");
      	}
      	return 0;
      }
      
      • -7
        @ 2022-4-24 17:53:53

        写题解请注意

        鼓励大家写题解,但注意题解格式。

        题解一定要有思路解析或代码注释,能否让别人理解你的思路

        也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

        给代码两端加上这个会舒服一些

        ```cpp

        你的代码

        ```

        </span>

        这个点在键盘的左上角tab上面那个键,注意切换输入法

        #include<iostream>
        using namespace std;
        int main()
        {
            int n;
            cin>>n;//这是一个注释
            return 0;
        } 
        

        请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

        抄袭题解一经发现直接取消成绩。

        题解被删除的可能

        1. 代码不符合格式规范
        2. 没有思路讲解或者没有注释,
        3. 无意义的题解

        大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

        • 1

        信息

        ID
        1405
        时间
        1000ms
        内存
        256MiB
        难度
        3
        标签
        递交数
        149
        已通过
        81
        上传者