思路:设置两个二维数组,一个char用于保存输入数据,经过处理得到一个int数组,输出。
处理的思考过程:
一开始想着做m*n的数组,将char数组中的每个位置进行周围值的判断(判断是否为炸弹,如是,则自增1),比如对一个3*3的数组mine,判断mine[1][1]则需要依次判断mine[0][0]mine[0][1]、......、mine[2][2],判断次数过多,而且这样会有超出数组下标的问题(比如判断mine[0][0]的时候,它只有3个方位是有值的,不像mine[1][1]8个方位都有值,这就需要做额外的 判断处理,麻烦到飞起啊(╯‵□′)╯︵┻━┻),亲测无果改攻下路。
转念想想,似乎判断char数组的各个值是否为炸弹更快一些(如果是,则对应的int数组的值就赋值-100,之后周围8个方位的值全自增1.。。int数组的值一开始初始化全为0),如果不是则直接过,而不会在同一个位置上进行重复的判断。恩,真睿智<( ̄︶ ̄)>,那么怎么解决超出数组下标的问题呢,容爸爸好好想想。。
Bingo,如果设定数组为(m+2)*(n+2)那么就好像把原本的数据套一层壳,而且这层壳也是可以访问的,那么数组下标问题就迎刃而解~\(≧▽≦)/~啦啦啦。
所以代码实现步骤是:
1.读取地图参数m和n;
2.定义char和int数组(mine[m+2][n+2],num[m+2][n+2]);
3.初始化char数组全赋值‘-’,初始化int数组全赋值0;
4.读取地图到char数组(赋值的数组下标为1~m和1~n,就是不要前面和后面的意思)【tips:读取时会读到‘\n’换行符,需要判断一下】
5.判断char数组的各个值是否为炸弹,如是,则对应的int数组的这个位置的值就赋值-100,之后周围8个方位的值全自增1。因为加了层“壳”,不必担心超出数组下标的问题。
6.输出int数组(仅输出num[1~m][1~n],加入判断,如果num[i][j] <0,则输出‘×’)
以上。
网友评论