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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏

發(fā)布時間:2025/3/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【題目鏈接】

ybt 1970:【15NOIP普及組】掃雷游戲
OpenJudge NOI 1.8 14:掃雷游戲地雷數(shù)計算
洛谷 P2670 [NOIP2015 普及組] 掃雷游戲

【題目考點】

1. 二維數(shù)組

2. 方向數(shù)組

在一個矩陣中,當前位置為(sx, sy),將下一個位置與當前位置橫縱坐標的差值記到一個數(shù)組中,即為方向數(shù)組。
方向數(shù)組有一維數(shù)組和二維數(shù)組兩種寫法,效果是等同的。
以遍歷上下左右四個方向為例:

  • 一維數(shù)組寫法
int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1}; for(int i = 0; i < 4; ++i) {int x = sx + dx[i], y = sy + dy[i];//(sx,sy)周圍的一個新的位置為(x, y) }
  • 二維數(shù)組寫法
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}}; for(int i = 0; i < 4; ++i) {int x = sx + dir[i][0], y = sy + dir[i][1];//(sx,sy)周圍的一個新的位置為(x, y) }

【解題思路】

輸入二維數(shù)組,遍歷每個位置的周圍8個位置,統(tǒng)計這8個位置中有幾個是’*’,輸出個數(shù)。

【題解代碼】

解法1:二維方向數(shù)組

#include<bits/stdc++.h> using namespace std; #define N 105 char mp[N][N];//地圖 int dir[8][2] = {{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};//方向數(shù)組 int main() {int n, m;cin >> n >> m;for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j)cin >> mp[i][j];for(int i = 1; i <= n; ++i){for(int j = 1; j <= m; ++j){if(mp[i][j] == '*')//如果是雷,直接輸出cout << '*';else{int ct = 0;//計數(shù)for(int k = 0; k < 8; ++k)//遍歷方向數(shù)組{int x = i + dir[k][0], y = j + dir[k][1];//新的位置為(x, y)if(x >= 1 && x <= n && y >= 1 && y <= m && mp[x][y] == '*')//如果(x,y)在地圖內(nèi)且是*ct++;}cout << ct;}}cout << endl;}return 0; }

解法2:一維方向數(shù)組

#include<bits/stdc++.h> using namespace std; #define N 105 char mp[N][N];//地圖 int dx[8] = {0,0,1,1,1,-1,-1,-1}, dy[8] = {-1,1,-1,0,1,-1,0,1};//方向數(shù)組 int main() {int n, m;cin >> n >> m;for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j)cin >> mp[i][j];for(int i = 1; i <= n; ++i){for(int j = 1; j <= m; ++j){if(mp[i][j] == '*')//如果是雷,直接輸出cout << '*';else{int ct = 0;//計數(shù)for(int k = 0; k < 8; ++k)//遍歷方向數(shù)組{int x = i + dx[k], y = j + dy[k];//新的位置為(x, y)if(x >= 1 && x <= n && y >= 1 && y <= m && mp[x][y] == '*')//如果(x,y)在地圖內(nèi)且是*ct++;}cout << ct;}}cout << endl;}return 0; }

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。