数据结构猜字谜游戏(Java语言编写)

【100%通过率】华为OD机试真题 Java 实现【猜字谜】【2022.11 Q4 新题】 小干设计了一人简单的清字谈游戏,游戏的迷面是一人错误的单词,比如nwes,玩家需要猜出谈底库中正确的单词。猜中的要求如·对于某个谜面和谜底单词,满足下面任一条件都表示猜中:1)变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的2)字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod”请你写一个程序帮忙在谜底库中找到正确的谜底。迷面是多个单词,都需要找到对应的谜底,如果找不到的话,返"not found" 阅读详情
    前几年买的一本数据结构与算法分析的书籍, 偶然看到以前有很多题目没有做, 现在抽空来看一下。
  • 题目:输入是由一些字母构成的一个二维数组以及一组单词组成。目标是要找出字谜中的单词, 这些单词可能是水平、垂直或者沿对角线任何方向放置的。
  • 思路:首先用广度或者深度都不是一个太理想的方式。因为条件限制, 所以在这里首先将横纵斜以及字符串反向的字符保存, 然后在一一匹配。在时间复杂度上粗略统计也只是平方。
/**
 * 解字谜游戏
 */
public class question_1_2 {

    static final char[][] c = new char[][]{
            {'t', 'h', 'i', 's'},
            {'w', 'a', 't', 's'},
            {'o', 'a', 'h', 'g'},
            {'f', 'g', 'd', 't'}
    };

    static String[] s = {"this", "two", "fat", "that", "sfgs"};
    static int min = c.length;     //最小长度
    static List<String> list = new ArrayList<>();


    public static void a(int minLength){
        for(int i = 0; i < c.length; i++){
            //横向和纵向
            char[] v1 = new char[c[i].length];
            char[] v2 = new char[c[i].length];
            for(int j = 0; j < c[i].length; j++){
                v1[j] = c[i][j];    //横向
                v2[j] = c[j][i];    //纵向
            }
            list.add(String.valueOf(v1));
            list.add(String.valueOf(v2));
            //斜对角
            if(i >= minLength - 1){
                char[] v3 = new char[i + 1];    //左上
                char[] v4 = new char[i + 1];    //左下
                char[] v5 = new char[i + 1];    //右上
                char[] v6 = new char[i + 1];    //右下
                int k = 0, l = i, t = c.length - 1;
                while(l >= 0){
                    v3[k] = c[k][l];
                    v4[k] = c[t][l];
                    v5[k] = c[l][t];
                    v6[k] = c[c.length - l - 1][t];
                    k++;
                    l--;
                    t--;
                }
                b(v3);
                b(v4);
                b(v5);
                b(v6);
            }
        }
    }

    //字符反转
    public static void b(char[] c){
        char[] c2 = new char[c.length];
        int j = 0;
        for(int i = c.length - 1; i >= 0; i--, j++){
            c2[j] = c[i];
        }
        list.add(String.valueOf(c2));
        list.add(String.valueOf(c));
    }

    public static void main(String[] args){
        //找出最小长度
        for (String string : s) {
            if(string.length() < min)
                min = string.length();
        }
        //枚举字谜数组
        a(min);

        //检索是否存在在字谜中
        Set<String> list2 = new TreeSet<>();
        for (String str : list) {
           for(int i = 0; i < s.length; i++){
               if(str.indexOf(s[i]) != -1)
                  list2.add(s[i]);
           }
        }

        for (String s : list2) {
            System.out.print(s + ",");
        }
    }
}
华为OD机试真题Java实现【猜字谜】真题+解题思路+代码(2022&2023) 2)字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod” 请你写一个程序帮忙在谜底库中找到正确的谜底。谜面是多个单词,都需要找到对应的谜底,如果找不到的话,返回"not found"小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。1)变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的;匹配到的正确单词列表,以“,”分隔 如果找不到,返回"not found" 阅读详情

相关推荐

【猜字谜】

已支持(Java & JS & Python & C & C++),考察:字符串去重和排序

优快云 9784

编写一个猜成语的小游戏。要求:使用一个字符串数组来保存10个四字成语,例如: String [] idioms = {“凉拌黄瓜”, “红烧肘子”, …};

编写一个猜成语的小游戏。 要求:使用一个字符串数组来保存10个四字成语,例如: String [] idioms = {“凉拌黄瓜”, “红烧肘子”, …}; 使用一个字符数组来保存20个无关字符,例如: String [] chars = {‘吃’, ‘喝’, ‘胡’, …}; 每次游戏开始时,随机选择一个成语,然后提取其中的4个汉字,再从字符数组中随机选择另外6个汉字,组成一个10个汉字的数组...

J_scret的博客 1438

[猜字谜]

真题目录:E 卷 100分题型。

qq_45776114的博客 453

华为OD机试真题---猜字谜(二)

小王设计了一个简单的猜字谜游戏,游戏的谜面是一个或多个错误的单词(如"nesw"),玩家需要猜出谜底库中正确的单词。猜中的要求如下: 1. **变换顺序**:谜面和谜底单词变换顺序后相同,例如"nwes"和"news"。 2. **字母去重**:谜面和谜底单词去重后的字母序列相同,例如"woo od"和"wo od",去重后都是"w od"。 玩家需要在谜底库中找到所有满足上述任一条件的单词,并返回结果列表。如果找不到对应的谜底,则返回"not found"或类似信息。

风信子的博客 1965

【100分-猜字谜】(题目+思路+Java&C++&Python解析+在线测试)

那么可以直接排序去重判断是不是相等的数据只有1000那么两两匹配即可,枚举谜面的单词,在嵌套一层循环判断是不是跟谜底单词相等,相等输出即可,如上述没有输出,输出一个"not found".详细请见代码。请你写一个程序帮忙在谜底库中找到正确的谜底。谜面是多个单词,都需要找到对应的谜底,如果找不到的话,返回"not found",玩家需要猜出谜底库中正确的单词。对于两个字符串变换顺序后顺序是一样的,和字母去重以后是一样的表示猜中谜底。小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如。

m0_73659489的博客 484

华为OD机试 -猜字谜(Java) | 机试题+算法思路+考点+代码解析 【2023】

2)字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod” 请你写一个程序帮忙在谜底库中找到正确的谜底。谜面是多个单词,都需要找到对应的谜底,如果找不到的话,返回"not found"小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。1)变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的;匹配到的正确单词列表,以“,”分隔 如果找不到,返回"not found"

坚果的博客 991

LeetCode解析------1178.猜字谜-位运算

题目: 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底: 单词 word 中包含谜面 puzzle 的第一个字母。 单词 word 中的每一个字母都可以在谜面 puzzle 中找到。 例如,如果字谜的谜面是 “abcdefg”,那么可以作为谜底的单词有 “faced”, “cabbage”, 和 “baggage”;而 “beefed”(不含字母 “a”)以及 “based”(其中

weixin_44337475的博客 375

【华为OD机试】猜字谜

小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的; 字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod” 请你写一个程序帮忙在谜底库中找到正确的谜底。谜面是多个单词,都需要找到对应的谜底,如果找不到的话,返回”not found”

算法菌的博客 98

求解字谜游戏java_JAVA编程思想导论(猜字谜游戏1.0)

一、引言本章将借用一个简易的猜字谜游戏,向读者简单介绍JAVA面向对象的部分知识以及实现思路。二、面向对象思想导论为了了解什么是面向对象,我们需要解决以下几点问题(如图2.1所示):面向对象是什么?面向对象的特征(或者说表现形式)。为什么要面向对象(它与面向过程的区别)。面向对象该怎么做?众所周知,计算机的编程语言是始于对机器的模仿,即以代码的形式控制机器完成人们希望所能达到的任务或者效果,故...

weixin_39663605的博客 190

2025华为OD机试真题-猜字谜(C++)-E卷-100分

小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 1)变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的; 2)字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod” 请你写一个程序帮忙在谜底库中找到正确的谜底。谜面是多个单词,都需要找到对应的谜底,如果找不到的话,返回”not found”

goldarmour的博客 534

2023华为OD机试真题【猜字谜/排序】

2)字母去重以后是一样的,比如“woood”和“wood”是一样的,它们去重后都是“wod”请你写一个程序帮忙在谜底库中找到正确的谜底。迷面是多个单词,都需要找到对应的谜底,如果找不到的话,返"not found"小干设计了一人简单的清字谈游戏,游戏的迷面是一人错误的单词,比如nwes,玩家需要猜出谈底库中正确的单词。1)变换顺序以后一样的,比如通过变换w和e的顺序,“nwes”跟“news”是可以完全对应的。比较经过去重排序后的谜面单词和谜底单词是否相同,若相同,则将原谜底单词添加到。

wtswts1232的博客 477

简单的猜字谜小游戏源码

只能猜4位数字,输入字母会成为死循环。 答案为:1352,如才1234 会返回1A2B.1A代表有一位数字是正好才对了,如此处的1。B就代表数字才对了,但是位置错了。 此题为《C语言从入门到精通》的第一个示例。

java猜字谜游戏

java 制作小游戏 猜字谜 随机产生数字 然后猜 会提示 猜大 猜小

JAVA封装思想导论(猜字谜游戏2.0)

一、引言   本章将第一篇中的猜字谜游戏1.0进行升级,然后向读者简单介绍JAVA中封装思想的部分知识以及其实现思路。 二、封装思想导论   在面向对象的编程思想中提出了三大基本特征:封装、继承和多态。其中,封装是继承与多态的基础。如果不能很好的理解封装的含义,那么继承和多态的学习也无从谈起。所以,为了更好的理解封装思想,我们将解决以下几个问题(如图2.1): 封装是什么? 我们为...

weixin_30302609的博客 151

猜字游戏,使用c语言写的简单代码

简单的猜字游戏,使用的是c语言代码,属于C语言基础阶段。

一个简单的字谜算法

NULL 博文链接:https://gaoquanyang.iteye.com/blog/1520076

记录一下leetcode:1178猜字谜

package com.feifei.demo.algorithm; import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** * leetcode: 1178.猜字谜 * <p> * 外国友人仿照中

qq_38796327的博客 703

Anaconda/Miniconda的删除和安装

要在 MacBook 上删除 Anaconda 或 Miniconda,并重新安装它,您可以按照以下步骤进行操作。

qq_27390023的博客 3026
上一篇: 标准库中的集合与映射
下一篇: 什么是java注解
LuFei_java
博客等级 码龄10年 1粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值