2048游戏矩阵操作算法

题目

1、手指向一个方向滑动,所有格子会向那个方向运动。
2、相同数字的两个格子,相撞时数字会相加。
输入描述:
1、输入为一个3 * 3的矩阵。
2、接下来输入一个1~4的数字。1表示向上滑动,2表示向下划动,3表示向左滑动,4表示向右滑动。
输出描述:
输出操作后的矩阵。

分析

这题考查的是对二维数组的操作,操作有四种类型,需要对遍历数组的方式进行区分。需要注意的地方有,整个数组会在滑动中移动,如果存在0则会被填充和覆盖,另外,相同的数字也会合并,如果合并后和后面的数组相同,则会继续合并。在处理这合并和移动操作时,我采用的方式是用一个列表来保存数组某一维中的非0数据,接下来对列表执行删除或添加数据的操作,忽略那些为0的值,操作结束之后再向数组中赋值(别忘记补0)。四种操作有相似性,关键是控制好i和j (i和j这里表示遍历二维数组的下标)的顺序以及前移的方向。

代码实现(Java)

import java.util.ArrayList;
import java.util.Scanner;

public class Main{
   

    static ArrayList<String> list = new ArrayList<>();

    public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        int[][] x = new int[3][3];
        for(int j = 0; j < 3; j++) {
   
            for(int i = 0; i < 3; i++) {
   
                x[i][j] = sc.nextInt();
            }
        }
        int a = sc.nextInt();
        find(x, a);
        for(int j = 0; j < 3; j++) {
   
            for (int i = 0; i < 3; i++) {
   
                System.out.print(x[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void find(int[][] x, int a) {
   
        switch (a) {
   
            case 1:
                for(int i = 0; i < 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值