Toggle navigation
C语言网
教程
博客
团队
训练
训练
题库
题集
状态
排名
比赛
比赛
标准
自主
考试
网课
AI助手
AI助手
代码解释
语言转换
编程助手
踏雪无痕
私信TA
用户名:txwh
访问量:163
签 名:
等 级
P3
排 名
22061
经 验
616
参赛次数
4
文章发表
1
年 龄
0
在职情况
学生
学 校
内蒙古工业大学
专 业
自我简介:
TA的其他文章
C++ 通俗易懂,就是代码稍微有点多
浏览:
101
你可能喜欢
点我有惊喜!你懂得!
浏览:
1218
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)
浏览:
587
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)
浏览:
748
C二级辅导-阶乘数列 (C语言代码)
浏览:
687
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)
浏览:
545
C++ 通俗易懂,就是代码稍微有点多
作者:
踏雪无痕
发表时间:2022-01-11 23:18:20
浏览:101 | 评论:0
原题链接:
Minesweeper
##### 解题思路:总的来说就是新建一个数组,然后将炸弹对应坐标旁边的数全部自增1,将炸弹本身设置为足够大的负数,多个炸弹周围方块重叠自增便是此方块旁边的炸弹数 ###### 这里来说下为什么炸弹本身要被设置成足够大的负数,假设仅仅设置为-1,那么当两个炸弹挨着的时候,上一次新数组中被设置为-1 的炸弹就被自增成为0,就无法与非炸弹区分了。 -------------------------- 下面代码中有很详细的注释: ```C++ #include "iostream" #include "vector" using namespace std; void set_number(vector
> & map, int index_x, int index_y){ //四个角,只需要设置三个方块自增 if(index_x == 0 && index_y == 0){ //设置-map[0].size(“足够大的负数”)为了防止连续炸弹造成以前炸弹标为-1增加的情况 map[index_x][index_y] = -map[0].size(); map[index_x+1][index_y] ++; map[index_x][index_y+1] ++; map[index_x+1][index_y+1] ++; }else if(index_x == 0 && index_y == map[0].size()-1){ map[index_x][index_y] = -map[0].size(); map[index_x][index_y-1] ++; map[index_x+1][index_y] ++; map[index_x+1][index_y-1]++; }else if(index_x == map.size()-1 && index_y == 0){ map[index_x][index_y] = -map[0].size(); map[index_x-1][index_y] ++; map[index_x][index_y+1] ++; map[index_x-1][index_y+1] ++; }else if(index_x == map.size()-1 && index_y == map[0].size()){ map[index_x][index_y] = -map[0].size(); map[index_x-1][index_y] ++; map[index_x][index_y-1] ++; map[index_x-1][index_y-1] ++; }else{ //假设在四个边(除了角,需要设置五个方块,) //方块数太多了,所以就采用循环来进行块的自增 //首先得将这六个块(5+1个炸弹)的顶点相对于炸弹向左上角偏移一个, //那么for循环炸弹就刚好在六个块中间了。 if(index_x == 0 && index_y > 0){ for(int i = index_x;i
0){ for(int i = index_x-1;i
0 && index_y == 0){ for(int i = index_x-1;i < index_x+3-1;i++){ for(int j = index_y;j
0 && index_y == map[0].size()-1){ for(int i = index_x-1;i < index_x+3-1;i++){ for(int j = index_y-1;j
>n>>m) { if (n == 0 && m == 0) { break; } //这些就是普通的输入,主要的逻辑功能全部放在函数里了 vector
> map(n, vector
(m, 0)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { char temp; cin >> temp; if (temp == '*') { set_number(map,i,j); } } } //普通的打印 cout << "Field #" << number << ":" << endl; for (int i = 0; i < map.size(); i++) { for (int j = 0; j < map[0].size(); j++) { if (map[i][j] < 0) { cout << '*'; }else{ cout << map[i][j]; } } cout << endl; } cout << endl; map.clear(); number ++; } } ```
0.0分
0 人评分
分享
收藏
C++
C语言网推出会员服务,提供C/C++/算法/Python等多套视频学练课程+源码资源社群答疑+私活推荐等资源,享受丰富的技术学习到变现的乐趣,
以含金量和学习效果勇敢挑战同类辅导
! 点击了解开通
评论区
«
»
提交
精彩推荐
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)
浏览:
901
C二级辅导-统计字符 (C语言代码)
浏览:
476
交换Easy (C语言代码)
浏览:
759
淘淘的名单 (C语言代码)
浏览:
1221
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)
浏览:
484
简单的a+b (C语言代码)
浏览:
547
非常简单的算法,题解1049:C语言程序设计教程(第三版)课后习题11.1 (C语言代码)
浏览:
608
求教大神。。。。1063,统计字符。
浏览:
11683
Manchester-台球碰撞-(附带图解)
浏览:
3707
题目:前2位数的和是第3位数 比如1 2 3 5 8 13 21 34 55 等,当你输入1时,出现1 输入9时,出现55 各位大神,如有简便方法,可以留
浏览:
266
有问题
,
问问AI
代码解释
语言转换
编程助手