1 条题解

  • 1
    @ 2024-8-14 16:21:33

    这道题其实不是特别特别难。只需要把思路捋捋清楚就好了。话不多说,先上AC代码:

    #include<bits/stdc++.h>

    using namespace std;//万能头文件 int n,m;

    char a[1005][1005];

    int main() {

    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++) {
    
    		int k=0;
      
    		if(a[i][j]!='*') {
      
    			if(a[i+1][j]=='*') {
        
    				k++;
          
    			}
        
    			if(a[i-1][j]=='*') {
        
    				k++;
          
    			}
        
    			if(a[i+1][j+1]=='*') {
        
    				k++;
          
    			}
        
    			if(a[i+1][j-1]=='*') {
        
    				k++;
          
    			}
        
    			if(a[i][j+1]=='*') {
        
    				k++;
          
    			}
        
    			if(a[i][j-1]=='*') {
        
    				k++;
          
    			}
        
    			if(a[i-1][j+1]=='*') {
        
    				k++;
          
    			}
        
    			if(a[i-1][j-1]=='*') {
        
    				k++;
          
    			}
        
    			a[i][j]='0'+k;
        
    		}
      
    	}
    
    }
    
    for(int i=1; i<=n; i++) {
    
    	for(int j=1; j<=m; j++) {
    
    		cout<<a[i][j];
      
    	}
    
    	cout<<endl;
    
    }
    
    return 0;
    

    } 我们做这道题需要先定好“地雷格”的长和宽,然后再开一个二维数组。 定一个变量(注意,变量要在循环里初始化)用来计算空格附近的雷的数量。 至于第40行的“a[i][j]='0'+k;”,因为二维数组a是属于char类型的,所以0需要加一对单引号。 最后未知的空都已经被填掉了,所以只需要将数组输出就好了。 如果还有dalao有更简单的方法,也希望可以分享一下,蟹蟹哦 PS:谢绝复制

    • 1

    信息

    ID
    498
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    10
    已通过
    5
    上传者