1. 程式人生 > >noi 14:掃雷遊戲地雷數計算

noi 14:掃雷遊戲地雷數計算

14:掃雷遊戲地雷數計算

總時間限制: 
1000ms 
記憶體限制: 
65536kB
描述

掃雷遊戲是一款十分經典的單機小遊戲。它的精髓在於,通過已翻開格子所提示的周圍格地雷數,來判斷未翻開格子裡是否是地雷。

現在給出n行m列的雷區中的地雷分佈,要求計算出每個非地雷格的周圍格地雷數。

注:每個格子周圍格有八個:上、下、左、右、左上、右上、左下、右下。

輸入
第一行包含兩個整數n和m,分別表示雷區的行數和列數。1 <= n <= 100, 1 <= m <= 100。
接下來n行,每行m個字元,‘*’表示相應格子中是地雷,‘?’表示相應格子中無地雷。字元之間無任何分隔符。
輸出
n行,每行m個字元,描述整個雷區。若相應格中是地雷,則用‘*’表示,否則用相應的周圍格地雷數表示。字元之間無任何分隔符。
樣例輸入
3 3
*??
???
?*?
樣例輸出
*10
221
1*1
  • 檢視 
  • 提交 
  • 統計 
  • 提問
    • 程式碼:
    #include<cstdio>
    int s[101][101]={0};
    char a[101][101],b;
    int main(){
        int n,m,i,j,i1,i2,j1,j2;
        scanf("%d%d",&n,&m);
        scanf("%c",&b);
        for(i=1;i<=n;i++){
            for(j=1;j<=m;j++){
                scanf("%c",&a[i][j]);
                if(a[i][j]=='*'){
                    i1=i-1;i2=i+1;j1=j-1;j2=j+1;
                    s[i1][j1]++;
                    s[i1][j2]++;
                    s[i1][j]++;
                    s[i2][j1]++;
                    s[i2][j2]++;
                    s[i2][j]++;
                    s[i][j1]++;
                    s[i][j2]++;
                }
            }
            scanf("%c",&b);
        }
        for(i=1;i<=n;i++){
            for(j=1;j<=m;j++){
                if(a[i][j]=='*')
                    printf("%c",a[i][j]);
                else
                    printf("%d",s[i][j]);
            }
            putchar('\n');
        }
        return 0;
    }