• 编写一个程序求解字谜游戏问题


    问题描述:输入是由一些字母和单词构成的二维数组,目标是找出字谜中的单词,这些单词可以是水平、垂直或沿对角线以任何方向放置。
    编写一个程序求解字谜游戏问题
    t h i s 找出 this、two、fat、that
    w a t s
    o a h g
    f g d t
    分析:方向有8种
    1从左到右 2从右到左
    3从上到下 4从下到上
    5从左上到右下 6从右下到左上
    7从左下到右上 8从右上到坐下
    已经头皮发麻
    /**
         * @description: 问题描述:输入是由一些字母和单词构成的二维数组,目标是找出字谜中的单词,这些单词可以是水平、垂直或沿对角线以任何方向放置。
         *   编写一个程序求解字谜游戏问题
         *   t h i s     找出 this、two、fat、that
         *   w a t s
         *   o a h g
         *   f g d t
             分析:方向有8种
                  1从左到右 2从右到左
                  3从上到下  4从下到上
                  5从左上到右下 6从右下到左上
                  7从左下到右上 8从右上到坐下
                已经头皮发麻
         * @return: void
         * @author: mufeng
         * @time: 2020/4/25 10:37
         */
        @Test
        public void test3(){
            String[] words={"this","two","fat","that","dgf"};
            char[][] two_dimensional_char={{'t','h','i','s'},{'w','a','t','s'},{'o','a','h','g'},{'f','g','d','t'}};
            findWords(two_dimensional_char,words);
        }
    
        private void findWords(char[][] two_dimensional_char, String[] words) {
            //1从左到右
            //2从右到左
            for(int x=0;x<two_dimensional_char.length;x++){
                StringBuilder lr=new StringBuilder();
                StringBuilder rl=new StringBuilder();
                //1从左到右
                for(int y=0;y<two_dimensional_char[x].length;y++){
                    lr.append(two_dimensional_char[x][y]);
                }
                //2从右到左
                for(int y=two_dimensional_char[x].length-1;y>=0;y--){
                    rl.append(two_dimensional_char[x][y]);
                }
                for(int i=0;i<words.length;i++){
                    //1从左到右
                    if(lr.toString().contains(words[i])){
                        System.out.print(words[i]);
                        int i1 = lr.toString().indexOf(words[i]);
                        for(int z=i1;z<words[i].length();z++){
                            System.out.print("["+x+","+z+"]");
                        }
                        System.out.println();
                    }
                    //2从右到左
                    if(rl.toString().contains(words[i])){
                        System.out.print(words[i]);
                        int i1 = rl.toString().indexOf(words[i]);
                        for(int z=rl.length()-1-i1;z>=0;z--){
                            System.out.print("["+x+","+z+"]");
                        }
                        System.out.println();
                    }
                }
            }
           //5从左上到右下 6从右下到左上(简单)
            //7从左下到右上 8从右上到坐下(简单)
            //3从上到下  4从下到上
            // 对角线翻转,打印需要旋转之前的
            tochar(two_dimensional_char);
        }
        public char[][] tochar(char[][] chars){
            char[][] toarr=new char[chars.length][chars.length];
            int k=0;
            for(char[] x:chars){
                for(int i=0;i<x.length;i++){
                    toarr[i][k]= chars[k][i];
                }
                k++;
            }
            return toarr;
        }

    代码还未写完,思路已经很明确

  • 相关阅读:
    AJAX以及XMLHttpRequest
    理解Promise对象
    HTTP报文整理
    前端 — URL、URI、URN概念和区别整理,以及URL语法规则
    gulp与webpack的区别
    Sass和less的区别是什么?用哪个好
    Vue3.0 && Vue3.0初体验 一
    Promise入门详解和基本用法
    js对象方法大全
    hash模式和history模式 实现原理及区别
  • 原文地址:https://www.cnblogs.com/mufeng07/p/12776346.html
Copyright © 2020-2023  润新知