10189 Minesweeper

题目大意:

题目原文:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=13&page=show_problem&problem=1130

扫雷游戏。。。输入“*”的分布,“.”号变成数字表示该数字周围的八个格子里面有几个“*”。

用二维字符串数组来储存输入的数据,然后从第一格开始数周围的格子的“*”个数。

附上代码:

View Code
 1 #include<stdio.h>
 2 int main()
 3 {
 4  int x,y,i,j,i2,j2,n=0;
 5  while(1)
 6  {
 7    n++;
 8    scanf("%d%d",&x,&y);
 9    getchar();
10    if(x==0&&y==0) break;
11    char a[x][y+1];
12    for(i=0;i<x;i++)//输入数据 
13    {
14     gets(a[i]);
15    }
16    for(i=0;i<x;i++)
17    {
18     for(j=0;j<y;j++)//前两个for循环表示从第一行的第一格开始,到最后一行的最后一格 
19      {
20        if(a[i][j]=='.')//如果是“.” 
21        {
22         a[i][j]='0';//先初始赋值为'0'字符 
23         for(i2=i-1;i2<=i+1;i2++)
24          for(j2=j-1;j2<=j+1;j2++)//然后循环,周围的九格(包括它自己) 
25           if(i2>=0&&i2<x&&j2>=0&&j2<y&&a[i2][j2]=='*') a[i][j]++;//条件是为了防止越界,如果是'*',计数加一 
26        }
27      }                 
28    }
29    if(n!=1) printf("\n");//控制格式,题目要求每两个Field之间直接留一个空行 
30    printf("Field #%d:\n",n);
31    for(i=0;i<x;i++)//输出 
32    {
33     for(j=0;j<y;j++)
34      printf("%c",a[i][j]);
35     printf("\n");
36    }
37  }
38  return 0;  
39 }
原文地址:https://www.cnblogs.com/syiml/p/2913797.html