《2048》是一款热门的数字游戏。游戏中,每个方块上的数字都有2的幂,数字方块会根据指令整体进行上下左右移动,如果两个数字相同的方块在移动中碰撞,他们就会合成一个新的方块。例如下图为4*4格子的游戏,0表示格子为空,图a为移动前格子中的数字,图b为图a左移后的结果:
输入
0 0 2 4
0 2 2 2
0 4 2 2
8 8 2 2
输出
2 4 0 0
4 2 0 0
4 4 0 0
16 4 0 0
问,给定n*m的矩阵M,0表示空格子,非0整数表示待移动的数字,按照2048的移动规则,输出进行左移操作后的矩阵结果。
输入
输入n行数据
第1行为矩阵行数
第2行到第n行为矩阵每行数据,m个数据用空格隔开
输出
输出左移后的矩阵,单行元素用空格隔开,换行处无空格
样例输入
4
0 0 2 4
0 2 2 2
0 4 2 2
8 8 2 2
样例输出
2 4 0 0
4 2 0 0
4 4 0 0
16 4 0 0
我的思路是将矩阵保存到二维数组,遍历每行相邻元素相等,即累加到前一位,后一位置0,之后将非零元素前移即可
package p6;
/**
* @author dustdawn
* @date 2019/9/11 19:00
*/
import java.util.Scanner;
public class Main {
/*请完成下面这个函数,实现题目要求的功能
当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
******************************开始写代码******************************/
static String solution(String[] input,int _input_size) {
int[][] ints = new int[_input_size][];
for (int i=0; i < input.length; i++){
String[] split = input[i].split(" ");
ints[i] = new int[split.length];
for (int j = 0; j < split.length; j++) {
//System.out.println(split[i]);
//int k = Integer.parseInt(split[j]);
ints[i][j] = Integer.parseInt(split[j]);
}
}
for (int i = 0; i < ints.length; i++) {
for (int j = 0; j < ints[i].length-1; j++) {
if (ints[i][j] == ints[i][j+1]) {
ints[i][j] *= 2;
ints[i][j+1] = 0;
}
}
}
for (int i = 0; i < ints.length; i++) {
int index = 0;
int[] re = new int[ints[i].length];
for (int j = 0; j < ints[i].length; j++) {
if (ints[i][j] != 0) {
re[index] = ints[i][j];
index++;
}
}
int dec = ints[i].length-index;
for (int j = dec, k = 1; j > 0; j--, k++) {
re[ints.length-k] = 0;
}
ints[i] = re;
}
StringBuffer sb = new StringBuffer();
for(int i=0;i<ints.length;i++){
for (int j = 0; j < ints[i].length; j++) {
sb.append(ints[i][j] + " ");
}
sb.append("\n");
}
return sb.toString();
}
/******************************结束写代码******************************/
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String res;
int _input_size = 0;
_input_size = Integer.parseInt(in.nextLine().trim());
String[] _input = new String[_input_size];
String _input_item;
for(int _input_i = 0; _input_i < _input_size; _input_i++) {
try {
_input_item = in.nextLine();
} catch (Exception e) {
_input_item = null;
}
_input[_input_i] = _input_item;
}
res = solution(_input,_input_size);
System.out.println(res);
}
}