2 条题解

  • 2
    @ 2024-4-29 14:22:10

    思路

    这道题可以直接用8个if。

    这道题还需要做特判:

    如果 i==1

    如果 i==n

    如果 j==1

    如果 j==m

    此外,如果你用的是

    scanf("%c",&a[i][j]);
    

    的话,那么你一定要在每行输出完了之后在数如一个字符,因为还要输入一个'\n'。

    最后,

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,m;
    char a[110][110],c;
    
    int main(){
    	cin >> n >> m ;
    	scanf("%c",&c);
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			scanf("%c",&a[i][j]);
    		}
    		scanf("%c",&c);
    	}
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			int cnt = 0;
    			if(a[i][j]=='*'){continue;}
    			else if(i==1){
    				if(j==1){
    					if(a[i+1][j]=='*'){cnt++;}
    					if(a[i+1][j+1]=='*'){cnt++;} 
    					if(a[i][j+1]=='*'){cnt++;}
    				}else if(j==m){
    					if(a[i+1][j]=='*'){cnt++;}
    					if(a[i+1][j-1]=='*'){cnt++;}
    					if(a[i][j-1]=='*'){cnt++;}
    				}else{
    					if(a[i+1][j]=='*'){cnt++;}
    					if(a[i+1][j+1]=='*'){cnt++;}
    					if(a[i+1][j-1]=='*'){cnt++;}
    					if(a[i][j+1]=='*'){cnt++;}
    					if(a[i][j-1]=='*'){cnt++;}
    				}
    			}else if(i==n){
    				if(j==1){
    					if(a[i-1][j]=='*'){cnt++;}
    					if(a[i-1][j+1]=='*'){cnt++;} 
    					if(a[i][j+1]=='*'){cnt++;}
    				}else if(j==m){
    					if(a[i-1][j]=='*'){cnt++;}
    					if(a[i-1][j-1]=='*'){cnt++;}
    					if(a[i][j-1]=='*'){cnt++;}
    				}else{
    					if(a[i-1][j]=='*'){cnt++;}
    					if(a[i-1][j+1]=='*'){cnt++;}
    					if(a[i-1][j-1]=='*'){cnt++;}
    					if(a[i][j+1]=='*'){cnt++;}
    					if(a[i][j-1]=='*'){cnt++;}
    				}
    			}else{
    				if(j==1){
    					if(a[i-1][j]=='*'){cnt++;}
    					if(a[i-1][j+1]=='*'){cnt++;} 
    					if(a[i+1][j]=='*'){cnt++;}
    					if(a[i+1][j+1]=='*'){cnt++;}
    					if(a[i][j+1]=='*'){cnt++;}
    				}else if(j==m){
    					if(a[i-1][j]=='*'){cnt++;}
    					if(a[i-1][j-1]=='*'){cnt++;}
    					if(a[i+1][j]=='*'){cnt++;}
    					if(a[i+1][j-1]=='*'){cnt++;}
    					if(a[i][j-1]=='*'){cnt++;}
    				}else{
    					if(a[i-1][j]=='*'){cnt++;}
    					if(a[i-1][j+1]=='*'){cnt++;}
    					if(a[i-1][j-1]=='*'){cnt++;}
    					if(a[i+1][j]=='*'){cnt++;}
    					if(a[i+1][j+1]=='*'){cnt++;}
    					if(a[i+1][j-1]=='*'){cnt++;}
    					if(a[i][j+1]=='*'){cnt++;}
    					if(a[i][j-1]=='*'){cnt++;}
    				}
    			}
    			a[i][j]=char(cnt+48);
    		}
    	}
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			printf("%c",a[i][j]);
    		}
    		cout << "\n" ;
    	}
    	return 0;
    }
    
    • 1
      @ 2024-2-6 19:51:51

      AC代码

      #include<bits/stdc++.h>
      using namespace std;
      int main()
      {
      	int n,m;
      	cin>>n>>m;
          char k[n+1][m+1]={0},ans[n+1][m+1]={0};
      	for(int i=0;i<n;i++)
      	{
      		for(int j=0;j<m;j++)
      		{
      			cin>>k[i][j];
      			ans[i][j]='0';
      		}
      	}
      	for(int i=0;i<n;i++)
      	{
      		for(int j=0;j<m;j++)
      		{
      			if(k[i][j]=='*')ans[i][j]='*';
      			if(k[i][j]=='?')
      			{
      				if(k[i][j+1]=='*')ans[i][j]++;
      				if(k[i][j-1]=='*')ans[i][j]++;
      				if(k[i+1][j]=='*')ans[i][j]++;
      				if(k[i+1][j+1]=='*')ans[i][j]++;
      				if(k[i+1][j-1]=='*')ans[i][j]++;
      				if(k[i-1][j]=='*')ans[i][j]++;
      				if(k[i-1][j-1]=='*')ans[i][j]++;
      				if(k[i-1][j+1]=='*')ans[i][j]++;
      			}
      		}
      	}
      	for(int i=0;i<n;i++)
      	{
      		for(int j=0;j<m;j++)
      		{
      			cout<<ans[i][j];
      		}
      		cout<<endl;
      	}
      	return 0;
      }
      
      • 1

      信息

      ID
      577
      时间
      1000ms
      内存
      256MiB
      难度
      2
      标签
      递交数
      42
      已通过
      27
      上传者