UVa227

本文介绍了一个5x5网格拼图游戏的算法实现,通过A、B、L、R指令移动空格,调整网格上的字母位置。文章详细展示了如何使用Java实现这一过程,包括读取输入、处理指令和更新网格状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人没有看原题目的输入输出样式,在紫书上看到的题,如果有不对的地方欢迎你们提出问题

import java.util.Scanner;
/*
 * 有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A,B,L,R,分别表示把上,下,左,右移入网格中,
 */
public class Test5 {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        char c [] = s.toCharArray();
        char cc[][] = new char[5][5]; //存放表格数据
        int m = 0,n = 0;
        for(int i = 0; i <5; i++){ // 输入的数据分配为5*5表格
            cc[0][i] = c[i];
            cc[1][i] = c[i+5];
            cc[2][i] = c[i+10];
            cc[3][i] = c[i+15];
            cc[4][i] = c[i+20];
        }
        for(int i = 0; i < 5; i++) // 寻找到为‘_’的元素
            for(int j = 0; j < 5; j++)
                if(cc[i][j] == '_'){
                    m = i;
                    n = j;
                }
        for(int i = 25; i < s.length()-1; i++){
            if(c[i] == 'A'){
                char t;
                t = cc[m-1][n];
                cc[m-1][n] = cc[m][n];
                cc[m][n] = t;
                m--; // 进行一次操作后 元素为‘_’的格子已经变了,所以我们要改变这个值
            }
            if(c[i] == 'B'){
                char t;
                t = cc[m+1][n];
                cc[m+1][n] = cc[m][n];
                cc[m][n] = t;
                m++;
            }
            if(c[i] == 'L'){
                char t;
                t = cc[m][n-1];
                cc[m][n-1] = cc[m][n];
                cc[m][n] = t;
                n--;
            }
            if(c[i] == 'R'){
                char t;
                t = cc[m][n+1];
                cc[m][n+1] = cc[m][n];
                cc[m][n] = t;
                n++;
            }
            if(c[i] != 'R' && c[i] != 'L'&& c[i] != 'B'&& c[i] != 'A')
                System.out.println("This puzzle has no final configuration");
        }
        for(int i = 0; i < 5; i++){
            for(int j = 0; j < 5; j++)
                System.out.print(cc[i][j]);
            System.out.println();
        }
    }
}

题目应该不难,如果有什么问题欢迎提问呀! 今天只做一个题,可惜。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值