这次是题目看错了,这个程序基本是完美的,但是踩雷后的输出应该和数字一起,看官稍稍修改一下就能通过。
扫雷 minesweeper version 0.2:百度网盘地址:http://pan.baidu.com/share/link?shareid=393843&uk=2450112150
#include <stdio.h>
int check(int i,int j,char mine[12][12])
{
int sum=0;
if(mine[i][j]=='*')
return -1;
else
{
if(mine[i-1][j-1]=='*')
sum++;
if(mine[i-1][j]=='*')
sum++;
if(mine[i-1][j+1]=='*')
sum++;
if(mine[i][j-1]=='*')
sum++;
if(mine[i][j+1]=='*')
sum++;
if(mine[i+1][j-1]=='*')
sum++;
if(mine[i+1][j]=='*')
sum++;
if(mine[i+1][j+1]=='*')
sum++;
return sum;
}
}
int main(int argc, char *argv[])
{
int num;
scanf("%d",&num);
for(int loop=0;loop<num;loop++)
{
int size;
char mine[12][12]={'\0'};
char input[12][12]={'\0'};
int output[12][12];
for(int i=0;i<12;i++)
for(int j=0;j<12;j++)
output[i][j]=-2;
scanf("%d",&size);
getchar();
for(int i=0;i<=size+1;i++)
{
for(int j=0;j<=size+1;j++)
{
if(i==0||j==0||i==size+1||j==size+1)
mine[i][j]='.';
else scanf("%c",&mine[i][j]);
}
if(i!=0&&i!=size+1) getchar();
}
for(int i=0;i<=size+1;i++)
{
for(int j=0;j<=size+1;j++)
{
if(i==0||j==0||i==size+1||j==size+1)
input[i][j]='.';
else scanf("%c",&input[i][j]);
}
if(i!=0&&i!=size+1) getchar();
}
int mark=0;
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
{
if(input[i][j]=='x')
output[i][j]=check(i,j,mine);
}
}
for(int i=0;i<12;i++)
{for(int j=0;j<12;j++)
if(output[i][j]==-1)
{mark=1;break;}
if(mark==1)break;
}
if(mark==1)
{
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
{
printf("%c",mine[i][j]);
}
printf("\n");
}
}
else
{
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
{
if(output[i][j]!=-2)
printf("%d",output[i][j]);
else printf(".");
}
printf("\n");
}
}
if(loop!=num-1)
printf("\n");
}
return 0;
}