日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CCF NOI1054 扫雷游戏

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CCF NOI1054 扫雷游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題鏈接:CCF NOI1054 掃雷游戲




時間限制: 1000 ms ?空間限制: 262144 KB

題目描述?

? 掃雷游戲是一款十分經典的單機小游戲。它的精髓在于,通過已翻開格子所提示的周圍格地雷數,來判斷未翻開格子里是否是地雷。
? 現在給出n行m列的雷區中的地雷分布,要求計算出每個非地雷格的周圍格地雷數。
? 注:每個格子周圍格有八個:上、下、左、右、左上、右上、左下、右下。

輸入

? 第一行包含兩個整數n和m,分別表示雷區的行數和列數。1 <= n <= 100, 1 <= m <= 100。
? 接下來n行,每行m個字符,‘*’表示相應格子中是地雷,‘?’表示相應格子中無地雷。字符之間無任何分隔符

輸出

? n行,每行m個字符,描述整個雷區。若相應格中是地雷,則用‘*’表示,否則用相應的周圍格地雷數表示。字符之間無任何分隔符。

樣例輸入

3 3
*??
???
?*?
樣例輸出

*10
221
1*1

數據范圍限制

? 1 <= n <= 100, 1 <= m <= 100。




問題分析

? 掃雷游戲是人們熟知的一個計算機游戲,通過這個程序,可以了解其局部的計算是如何實現的。

? 這是一個簡單的計算問題,對于一個位置,直接計算其周圍的地雷數量即可。

程序說明

? 定義二維數組用于存儲掃雷游戲的棋盤時,周圍多出一圈,可以省去數組下標的越界判定。

? 這里給出兩種計算地雷數量的方法,分別編寫程序。

要點詳解 先定義一個符號常量,再用它來定義二維數組,可以使得程序的通用性得到提高一些編程技巧有助于簡化程序的代碼函數memset()用于給大量的存儲空間設置初始值是方便的。數組around[]存儲周圍元素的相對下標,使得無序變有序,可以用循環來處理。



參考鏈接:(略)。

100分通過的C語言程序之一:

#include <stdio.h> #include <string.h>struct _around {int drow;int dcol; } around[] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}}; #define AN 8#define N 100 char a[N+2][N+2];int main(void) {int n, m, i, j, k;memset(a, 0, sizeof(a));scanf("%d%d", &n, &m);for(i=1; i<=n; i++)scanf("%s", a[i]+1);for(i=1; i<=n; i++) {for(j=1; j<=m; j++) {int count = 0;if(a[i][j] == '*')printf("%c", a[i][j]);else {for(k=0; k<AN; k++)if(a[i + around[k].drow][j + around[k].dcol] == '*')count++;printf("%d", count);}}printf("\n");}return 0; }

100分通過的C語言程序之二:

#include <stdio.h>struct _around {int drow;int dcol; } around[] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}}; #define AN 8#define N 100char a[N+2][N+2];int main(void) {int n, m, i, j, k;scanf("%d%d", &n, &m);for(i=1; i<=n; i++)scanf("%s", a[i]+1);for(i=1; i<=n; i++)for(j=1; j<=m; j++)if(a[i][j] != '*')a[i][j] = 0;for(i=1; i<=n; i++)for(j=1; j<=m; j++)if(a[i][j] == '*')for(k=0; k<AN; k++)if(a[i + around[k].drow][j + around[k].dcol] != '*')a[i + around[k].drow][j + around[k].dcol]++;for(i=1; i<=n; i++) {for(j=1; j<=m; j++)if(a[i][j] == '*')printf("%c", a[i][j]);elseprintf("%d", a[i][j]);printf("\n");}return 0; }/* 4 4 ?**? *?** ???? ??*? 2**3 *4** 1333 01*1 */



轉載于:https://www.cnblogs.com/tigerisland/p/7563897.html

總結

以上是生活随笔為你收集整理的CCF NOI1054 扫雷游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。