【15NOIP普及组】扫雷游戏
题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1970
洛谷地址:https://www.luogu.com.cn/problem/P2670
本题的难点,1、是字符及字符串的出入输出 2、四个方向的遍历
方法一:有BUG
#include<bits/stdc++.h> using namespace std; int n,m,cnt; char a[111][111]; int main() { cin>>m>>n; getchar(); for(int i=0;i<m;i++) { cin.getline(a[i],111); } for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { cnt=0; if(a[i][j]=='*')cout<<'*'; else if(a[i][j]=='?') { if(a[i][j+1]=='*')cnt++; if(a[i+1][j]=='*')cnt++; if(a[i+1][j+1]=='*')cnt++; if(a[i][j-1]=='*')cnt++; if(a[i-1][j-1]=='*')cnt++; if(a[i-1][j]=='*')cnt++; if(a[i-1][j+1]=='*')cnt++; if(a[i+1][j-1]=='*')cnt++; cout<<cnt; } } cout<<endl; } return 0; }
方法二:
#include<bits/stdc++.h> using namespace std; int n, m; char a[105][105]; int dx[8]= {-1, 1, 0, 0, -1, -1, 1, 1};//依次对应上、下、左、右、左上、右上、左下、右下八个方向 的x坐标变化差值 int dy[8]= { 0, 0, -1, 1, -1, 1, -1, 1};//依次对应上、下、左、右、左上、右上、左下、右下八个方向 的y坐标变化差值 int main() { cin>>n>>m; getchar();//过滤掉输入m后的换行字符 for(int i=0; i<n; i++) { for(int j=0; j<m; j++) a[i][j]=getchar(); getchar();//过滤每行的换行字符 } //二维数组输入一定要测试输入是否正确 // for(int i=0; i<n; i++) { // for(int j=0; j<m; j++) // cout<<a[i][j]; // cout<<endl; // } for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { int cnt=0;//统计每个坐标点周边*的数量 ,初始化为0 for(int k=0; k<8; k++) {//循环遍历坐标点8个方向 int nx=i+dx[k]; int ny=j+dy[k]; if(nx < 0 || nx > n-1 && ny < 0 && ny > m-1)continue;//如果越界,则判断下一个方向 if(a[nx][ny]=='*')cnt++;//如果周边有*则把cnt累加1 } if(a[i][j]=='*')//如果该点为*则输出* cout<<'*'; else//否则输出周边*数 cout<<cnt; } cout<<endl; } return 0; }
更多题解:http://8.142.64.55:8888/discuss/621b36803a3357268ae08e7e#1645972175251
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现