zoukankan      html  css  js  c++  java
  • java实现第七届蓝桥杯棋子换位

    棋子换位
    棋子换位
    
    有n个棋子A,n个棋子B,在棋盘上排成一行。
    它们中间隔着一个空位,用“.”表示,比如:
    
    AAA.BBB
    
    现在需要所有的A棋子和B棋子交换位置。
    移动棋子的规则是:
    1. A棋子只能往右边移动,B棋子只能往左边移动。
    2. 每个棋子可以移动到相邻的空位。
    3. 每个棋子可以跳过相异的一个棋子落入空位(A跳过B或者B跳过A)。
    
    AAA.BBB 可以走法:
    移动A ==> AA.ABBB
    移动B ==> AAAB.BB
    
    跳走的例子:
    AA.ABBB ==> AABA.BB
    
    以下的程序完成了AB换位的功能,请仔细阅读分析源码,填写划线部分缺失的内容。
    
    
    
    public class Main
    {
        static void move(char[] data, int from, int to)
        {
            data[to] = data[from];
            data[from] = '.';
        }
        
        static boolean valid(char[] data, int k)
        {
            if(k<0 || k>=data.length) return false;
            return true;
        }
        
        static void f(char[] data)
        {
            while(true){
                boolean tag = false;
                for(int i=0; i<data.length; i++){
                    int dd = 0; // 移动方向
                    if(data[i]=='.') continue;
                    if(data[i]=='A') dd = 1;
                    if(data[i]=='B') dd = -1;
                    
                    if(valid(data, i+dd) && valid(data,i+dd+dd) 
                    && data[i+dd]!=data[i] && data[i+dd+dd]=='.'){ 
                    // 如果能跳...
                        move(data, i, i+dd+dd);
                        System.out.println(new String(data));
                        tag = true;
                        break;
                    }
                }
                
                if(tag) continue;
                
                for(int i=0; i<data.length; i++){
                    int dd = 0; // `移动方向
                    if(data[i]=='.') continue;
                    if(data[i]=='A') dd = 1;
                    if(data[i]=='B') dd = -1;            
                         
                    if(valid(data, i+dd) && data[i+dd]=='.'){ 
                    // 如果能移动...
                        if( _____________________ ) continue;  //填空位置
                        move(data, i, i+dd);
                        System.out.println(new String(data));
                        tag = true;
                        break;
                    }
                }
                
                if(tag==false) break;                    
            }
        }
        
        public static void main(String[] args)
        {
            char[] data = "AAA.BBB".toCharArray();    
            f(data);
        }
    }
    
    
    
    注意:只提交划线部分缺少的代码,不要复制已有代码或填写任何多余内容。
    
    
    
    答案:valid(data,i+dd+dd) && valid(data, i-dd) && data[i-dd] == data[i+dd+dd]
    
  • 相关阅读:
    Google官方关于Android架构中MVP模式的示例续-DataBinding
    值不值
    [译]Godot系列教程五
    [译]Google官方关于Android架构中MVP模式的示例
    遭遇Web print
    如何寻找有价值的点
    充电时间 Go中的数组、切片、map简单示例
    一段良好的程序永远不应该发生panic异常
    居然是Firefox没有抛弃我们
    macOS 升级到了10.12.1
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077235.html
Copyright © 2011-2022 走看看