`

一个简单的字谜算法

 
阅读更多

最近在看数据结构与算法分析(java语言描述)这本书,书的第一章有这样一个算法题:

输入是由一些字母构成的一个二维数组以及一组单词组成。目标是要找出字谜中的单词,这些单词可能是水平,垂直或沿对角线上任何方向设置的。经过思考,我写出的一个查找算法如下:

//输出字谜中的单词
	public static void outPutlogoGriph(String temp,String[] logogriph){
		for(int k=0;k<logogriph.length;k++){
			if(temp.indexOf(logogriph[k])>=0){
				System.out.println(logogriph[k]);
			}
		}
	}
	//比较字谜中的单词
	public static void getLogoGriph(String[][] s,String[] logogriph){
		String temp = "";
		// 查找水平方向上的单词,从左往右的方向
		for(int i=0;i<s.length;i++){
			//正序的
			temp  = "";
			for(int j=0;j<s[i].length;j++){
				temp += s[i][j];
			}
			//比较,并输出字谜中的单词
			outPutlogoGriph(temp,logogriph);
			//逆序的
			temp  = "";
			for(int j=s[i].length-1;j>=0;j--){
				temp += s[i][j];
			}
			//比较,并输出字谜中的单词
			outPutlogoGriph(temp,logogriph);
		}
//		 查找垂直方向上的单词,从上往下的方向
//		 查找垂直方向上的单词,从下往上的方向
		temp = "";
		for(int i=0;i<s[0].length;i++){
			//上下方向的
			temp = "";
			for(int j=0;j<s.length;j++){
				temp += s[j][i];
			}
			//比较,并输出字谜中的单词
			outPutlogoGriph(temp,logogriph);
			//下上方向的
			temp = "";
			for(int j=s.length-1;j>=0;j--){
				temp += s[j][i];
			}
			//比较,并输出字谜中的单词
			outPutlogoGriph(temp,logogriph);
		}
		//查找第一条对角线(从上往下的对角线)上的单词,正方向(针对的是规则的二维数组)
		temp = "";
		for(int i=0;i<s.length;i++){
			temp += s[i][i];
		}
		//正向的
		//比较,并输出字谜中的单词
		outPutlogoGriph(temp,logogriph);
		// 查找对角线上的单词,反方向
		temp = "";
		for(int i= s.length-1;i>=0;i--){
			temp += s[i][i];
		}
		//比较,并输出字谜中的单词
		outPutlogoGriph(temp,logogriph);
		//查找第二条对角线,从下往上的对角线
		temp = "";
		for(int i=0;i<s.length;i++){
			temp += s[s.length-i-1][i];
		}
		//正向的(斜向上)
		//比较,并输出字谜中的单词
		outPutlogoGriph(temp,logogriph);
		temp = "";
		for(int i=0;i<s.length;i++){
			temp += s[i][s.length-i-1];
		}
		//正向的(斜向下)
		//比较,并输出字谜中的单词
		outPutlogoGriph(temp,logogriph);
	}
	public static void main(String[] args){
		//注意该方法只适用于规则的数组,即不允许String[][]s = new String[4][]这种不规则的数组;
		String[][] s = new String[4][4];
		s[0][0] = "t";
		s[0][1] = "t";
		s[0][2] = "i";
		s[0][3] = "f";
		s[1][0] = "t";
		s[1][1] = "h";
		s[1][2] = "a";
		s[1][3] = "o";
		
		s[2][0] = "w";
		s[2][1] = "t";
		s[2][2] = "a";
		s[2][3] = "w";
		
		s[3][0] = "o";
		s[3][1] = "s";
		s[3][2] = "a";
		s[3][3] = "t";
		String[] logogriph = new String[]{"this","two","fat","that"};
		getLogoGriph(s,logogriph);
	}

 

以后会渐进的补充!

分享到:
评论

相关推荐

    台湾师范大学ACM算法入门教程 离线版

    台湾师范大学的ACM算法入门教程是一份非常宝贵的教育资源,它为初学者提供了全面而深入的算法学习路径。ACM(International Collegiate Programming Contest)是全球知名的大学生编程竞赛,旨在提升学生的算法设计、...

    067回溯算法的实现及实例_回溯算法实现实例_

    例如,在字谜问题中,如果一个字母已经出现在同一行、列或宫中,那么在其他位置再放置这个字母就是无效的。 6. **实现细节**:在编程实现时,常用的数据结构有栈或队列来保存状态,递归函数或迭代过程来模拟深度...

    枚举算法教学设计.pdf

    * 情境导入:从教室询问学生喜不喜欢玩游戏,喜欢玩什么样的游戏开场师:今天我们来玩一个游戏,到底是玩什么样的游戏呢,大家请看 "猜谜语" 程序文件。 * 教学过程〔一〕:教师呈现问题1,请同学站起来答复〔解决...

    c# 二叉树算法 根据字母 生成所有的单词

    在实现这个算法时,我们首先需要一个函数来插入单词到二叉树。这个函数会接收一个单词和一个二叉树节点,然后将单词的每个字符插入到正确的位置。在C#中,这可以通过迭代单词并使用递归来完成。 然后,我们需要一个...

    猜谜语.zip

    谜语的类型可以包括字谜、成语谜、灯谜等,每个类型都可以设计一个专门的谜语池。数据库的设计应当保证谜语的难易程度适中,覆盖面广,以满足不同用户的需求。 用户界面设计对于用户体验至关重要,它需要简洁易懂,...

    matlab开发-matlab竞赛纵横字谜

    在本项目中,“matlab开发-matlab竞赛纵横字谜”是一个使用MATLAB进行编程竞赛相关的开发案例。这个压缩包包含了一系列与实现纵横字谜解题算法和比赛评分系统相关的文件。下面将对这些文件的功能和可能涉及的MATLAB...

    Algorithms-DataStructures:一个存储我所有算法和数据结构工作的存储库

    算法-数据结构这是一个存储库,用于存储我研究算法和数据结构的所有工作。 在下面,您将找到我为LeetCode或在线课程...LeetCode Valid Anagram.py这个问题要求给定两个字符串s和t,编写一个函数来确定t是否是s的字谜

    algorithms:通用算法和数据结构

    字谜 元音 数组分块 反向阵列 反向词 大写 凯撒密码 赎金注5 均值,中位数,众数 两次总和 最大利润 Eratosthenes筛 斐波那契 记忆斐波那契 楼梯 金字塔 矩阵精神 数据结构算法 Queue列 堆栈 链表 挑战: 中点 圆...

    algorithm:算法解决方案-Go,Python,Scala

    对于大型数据集,计算与元素n的平方成正比(O(n ^ 2))的简单实现变得完全不切实际。 按语言组织 按类别组织 类型 描述 细节 执行 堆 有效括号 链表 MergeTwoSortedLists 链表 合并k排序列表 2个指针 困雨水 动态...

    DS-Algos-Python:使用Python对各种数据结构和算法进行编码的解决方案

    使用Python的数据结构和算法这是使用Python中实现的数据结构解决的各种常见编程问题的集合...is an anagram of "cannot aim"我们的带有两个字符串的字谜检查算法,并将根据是否找到字谜给出一个布尔值TRUE / FALSE?阵

    lrucacheleetcode-LeetCode:力扣算法解决方案

    在每个节点中填充下一个右指针 II 帕斯卡三角形 II 单号二 二叉树先序遍历 二叉树后序遍历 LRU缓存 计算具有唯一数字的数字 等分子集总和 斐波那契数 从二叉树构造字符串 二叉树的最大宽度 实现魔术词典 托普利兹...

    谜语日落西山.doc

    谜语集中的“谜语日落西山.doc”还包含了一些逻辑谜题,比如“去掉冰的两点(变成水)”,答案是“冰”,因为它通过一个字的变形,巧妙地隐藏了谜底。这类谜题更多地依赖于汉字的结构和意义,让解谜者在文化和语言的...

    Algorithm-pynpuzzle.zip

    本文将深入探讨“Algorithm-pynpuzzle.zip”压缩包中的内容,这是一个用Python实现的求解和测试N字谜问题的算法。我们将详细解析这个算法的工作原理,以及如何利用Python进行有效的实现。 N字谜问题,又称为N×N...

    Anagram:一个简单的Java程序,可以生成字谜来解决

    在这个特定的情况下,我们有一个名为"Anagram"的Java程序,它的功能是生成字谜供用户解决。字谜是一种智力游戏,通常由打乱顺序的字母组成,玩家需要通过重组这些字母来找出隐藏的单词或短语。 在Java编程中,实现...

    javalruleetcode-cs-algorithms:CS算法实践repo

    这个存储库提供了几个编程问题的代码片段。 这些问题是从各种来源阅读的。 只要有可能,就会有链接和问题一起呈现。 编程语言 我主要使用 Javascript、Typescript、Java 和 Scala。 您可以期待使用其中一种编程语言...

    algorithms:您在面试过程中必须处理的一些算法示例(以及我的解决方案)

    我们必须编写一个方法如果我们可以从给定字符串的任何字谜中形成回文,则接受一个字符串并输出 true。否则输出 false。" 002 : “给定一个字符串数组,返回第一个在数组中只出现一次的字符串。” 003 :

    Leetcode扑克-Algos:我最喜欢的一些算法问题-JS&Python

    第一个缺失的正JS 水果入篮JS CodeSignal 街机问题 介绍 10 - 常见字符计数JS & Python 13 - 在括号中反转JS & Python 14 - 交替求和JS & Python 15 - 添加边框JS & Python 16 - 相似吗? JS & Python 18 - 回文重排...

    Anagrams_Anaghram_

    在这个场景下,"Anaghram"可能是一个程序或算法,用于创建、解决或者分析字谜。 描述 "Anagram programs for your" 表明我们要讨论的是用于个人使用的字谜程序。这些程序可能帮助用户生成新的字谜,解决已有的字谜...

    小学数学猜谜语素材集锦一二年级上

    例如,一个关于交通工具的谜语:“小小身子白色帆,风吹就跑,不用船桨不用帆”,孩子们需要通过描述的线索推理出是“纸飞机”。这样的过程其实与学习编程时进行问题分解和算法设计有着异曲同工之妙。 其次,谜语...

Global site tag (gtag.js) - Google Analytics