1862 zoj

july 发表于 2008-12-31 21:34:45

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1862



#include <iostream>
using namespace std;
int main()
{     
    char a[11][11],b[11][11],c[11][11];
 int i,j,n,touchmine,mines,m,k,cases=0;
 while(cin>>n)
 {
         if(cases++) printf("\n");
         for(i=1;i<=n;++i)
  for(j=1;j<=n;++j)
   cin>>a[i][j];
  for(i=1;i<=n;++i)
  for(j=1;j<=n;++j)
   cin>>b[i][j];
  touchmine=0;
  for(i=1;i<=n;++i)
   for(j=1;j<=n;++j)
    {
     mines=0;
     if(b[i][j]=='x')
     {
      for(m=i-1,k=j-1;k<=j+1;++k)
       if(m>=1&&k>=1&&k<=n)
        if(a[m][k]=='*')
         mines++;
      m=i;
      if((k=j-1)>=1)     /*"k=j-1"加了括号才ac了... 比较运算符的优先级比赋值运算符高!!*/  
       if(a[m][k]=='*')
        mines++;
      if((k=j+1)<=n)
       if(a[m][k]=='*')
        mines++;
      for(m=i+1,k=j-1;k<=j+1;++k)
       if(m<=n&&k>=1&&k<=n)
        if(a[m][k]=='*')
         mines++;
      c[i][j]=mines+48;
     }
     else
      c[i][j]='.';
     if(a[i][j]=='*'&&b[i][j]=='x')    /*判断有没有踩雷*/
      touchmine=1;
    }
  if(touchmine)
   for(i=1;i<=n;++i)
    for(j=1;j<=n;++j)
     if(a[i][j]=='*')
      c[i][j]='*';
  for(i=1;i<=n;++i)
  {
   for(j=1;j<=n;++j)
    cout<<c[i][j];
   cout<<endl;
  }       
 }   
    return 0;
}

最新评论

发表评论

*昵称

已经注册过? 请登录

Email
网址
*评论