20 棋子移动

作者: DONGWEILAI | 来源:发表于2020-05-04 23:48 被阅读0次

    魔法世界的历史上曾经出现过一位赫赫有名的不败战神陈庆之,陈庆之以棋道悟兵法,一生身经数百战,没有一场败绩,而且没有一场不是在绝对的劣势中大胜敌军。
    受此影响,魔法世界开始流行一种叫棋子移动的游戏,即有2N个棋子(N≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,例如当N=4时,棋子排列情况为:
    〇〇〇〇●●●●
    移动棋子的规则是:每次必须同时移动相邻两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置.每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。例如当N=4时,最终排列情况为:
    〇●〇●〇●〇●
    试求出移动步骤。

    【输入格式】
    一个整数,即N。

    【输出格式】
    输出移动步骤,每一步操作占一行。

    【输入样例】
    4
    【输出样例】
    4,5-->9,10
    8,9-->4,5
    2,3-->8,9
    7,8-->2,3
    1,2-->7,8

    package algorithmclassic.ch02;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    /**
     * @author Dylan
     * @date 2020/5/4 - 22:58
     */
    public class Q20 {
        static int j;
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
            j = 2 * n + 1;
            f(n);
        }
    
        public static void move(int i){
            System.out.printf("%d,%d-->%d,%d\n", i, i + 1, j, j + 1);
            j = i;
        }
    
        // 全部转换成4的情况
        public static void f(int n){
            if(n == 4){
                move(4);
                move(8);
                move(2);
                move(7);
                move(1);
            }else{
                move(n);
                move(2 * n - 1);
                f(n - 1);
            }
        }
    }
    
    
    
    

    相关文章

      网友评论

        本文标题:20 棋子移动

        本文链接:https://www.haomeiwen.com/subject/yrbughtx.html