单词接龙编程
① 关于 Free pascal的几道问题
宽搜.....
楼主自己开个队列,扩展点吧......
实在是太多了
懒得做
如果,就一两道也就编了....
先将单词复制一份。拿你的例子说,5个单词,由于每个可以出现两次,那么最终就是10个单词。
构造图结构,你把每个单词当成一个节点,遍历所有节点,能收尾相连且不包含节点的就连一根线,做成一个有向图。
遍历整个图,找到最长的
由于你最多只有20个单词,这种方法是绝对可行的,相当于把所有可能的龙找出来并挑选最长的。
算我无聊,写了份代码,你参考下吧,输入输出我没怎么管哈
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class FindLongestDragon
{
public static void main(String args[])
{
getLongestDragon('a', "at", "touch", "cheat", "choose", "tact");
}
public static void getLongestDragon(char startChar, String ... nodesStr)
{
List<Node> nodes = new ArrayList<Node>();
for (String nodeStr : nodesStr)
{
nodes.add(new Node(nodeStr));
nodes.add(new Node(nodeStr));
}
//遍历所有节点关系,构成图
for (Node node1 : nodes)
{
for (Node node2: nodes)
{
if (node1 != node2)
{
checkIsLink(node1, node2);
}
}
}
//遍历
for (Node node : getStartWithCharNodes(nodes, startChar))
{
Dragon dragon = new Dragon();
dragon.append(node);
dragon.findNextNode();
}
//输出所有的龙
Collections.sort(Dragon.dragons);
for (Dragon dragon : Dragon.dragons)
{
System.out.println(dragon);
}
}
//b是否能和a相连
public static void checkIsLink(Node a, Node b)
{
String nameA = a.getName();
String nameB = b.getName();
//存在包含关系
if (nameA.endsWith(nameB) || nameB.startsWith(nameA))
{
return;
}
if (getLinkStr(a, b) != null)
{
a.addChild(b);
}
}
public static String getLinkStr(Node a, Node b)
{
String nameA = a.getName();
String nameB = b.getName();
//从第二个字符开始检查是否相连
for (int i = 1, length = nameA.length(); i < length; i++)
{
String linkStr = nameA.substring(i);
if (nameB.startsWith(linkStr))
{
return linkStr;
}
}
return null;
}
private static List<Node> getStartWithCharNodes(List<Node> list, char startChar)
{
List<Node> nodes = new ArrayList<Node>();
int size = list.size();
for (int i = 0; i < size; i+=2)
{
Node node = list.get(i);
if (node.getName().charAt(0) == startChar)
{
nodes.add(node);
}
}
return nodes;
}
}
class Dragon implements Comparable<Dragon>
{
private List<Node> nodes = new ArrayList<Node>();
public static List<Dragon> dragons = new ArrayList<Dragon>();
public void findNextNode()
{
Node lastNode = nodes.get(nodes.size() - 1);
boolean hasNextNode = false;
for (Node nextNode : lastNode.getChildren())
{
if (!nodes.contains(nextNode))
{
hasNextNode = true;
append(nextNode);
findNextNode();
removeTail();
}
}
//找到了尽头
if (!hasNextNode)
{
Dragon = this.();
if (!dragons.contains())
{
dragons.add();
}
}
}
private Dragon ()
{
Dragon dragon = new Dragon();
for (Node node : this.nodes)
dragon.append(node);
return dragon;
}
public void append(Node node)
{
nodes.add(node);
}
public void removeTail()
{
nodes.remove(nodes.size() - 1);
}
public String toString()
{
StringBuilder sb = new StringBuilder();
//展示所有的节点
String allNodeLinkStr = getAllNodeLinkStr();
sb.append(allNodeLinkStr).append(" ");
sb.append(allNodeLinkStr.length()).append(" ");
for (Node node : nodes)
{
sb.append(node.getName()).append(" ");
}
return sb.toString();
}
@Override
public int compareTo(Dragon o)
{
return o.getLength() - this.getLength();
}
public int getLength()
{
return getAllNodeLinkStr().length();
}
public String getAllNodeLinkStr()
{
StringBuilder sb = new StringBuilder();
//展示所有的节点
sb.append(nodes.get(0));
for (int i = 1, length = nodes.size(); i < length; i++)
{
Node node = nodes.get(i);
sb.append(node.getName().substring(FindLongestDragon.getLinkStr(nodes.get(i - 1), node).length()));
}
return sb.toString();
}
public boolean equals(Object o)
{
if (o instanceof Dragon)
{
Dragon d = (Dragon)o;
if (d.nodes.size() == this.nodes.size())
{
int length = this.nodes.size();
for (int i = 0; i < length; i++)
{
if (!d.nodes.get(i).getName().equals(this.nodes.get(i).getName()))
{
return false;
}
}
return true;
}
}
return false;
}
}
class Node
{
private List<Node> children = new ArrayList<Node>();
private String name;
public Node(String name)
{
super();
this.name = name;
}
public List<Node> getChildren()
{
return children;
}
public String getName()
{
return name;
}
public void addChild(Node e)
{
this.children.add(e);
}
public String toString()
{
return this.getName();
}
}
③ JAVA自学看什么书好啊
学Java,有哪些推荐书籍可以看?很多人都会有这样的疑问。如果你初出茅庐,对Java感兴趣,在这行深钻研,那么这些书绝对不能少;如果你已经是个Java工程师,那么这些书可以帮助你在Java的路上更加精进。一起来看看吧!
四大名着之《Java核心技术(第10版)》
提起Java入门必读,四大名着是少不了的。《Java 核心技术》就是其中之一,分卷一、卷二两册,卷一讲基础,卷二为进阶。全书对于Java语言的核心概念、语法、重要特性和开发方法讲解地非常细致,可以说是一部有关Java的网络全书。
四大名着之《EffectiveJava中文版(第 2 版)》
“神书”、“整本书都是精华”、“内容永不过时”、“Java 程序员必读”……这些标签都是属于《Effective Java中文版》的。
这本书不是讲理论基础的,而是讲实战的。书中介绍了78条极具实用价值的经验规则,涵盖了大多数开发人员每天所面临的问题的解决方案,并且通过代码例子进一步进行佐证,让你知其然,也知其所以然。
哪怕不是Java程序员,也能买来看看,书中绝妙的编程观是跨语言、跨平台的。
《Java语言程序设计(基础篇)(原书第 10 版)》
这应该是很多程序员,尤其是Java程序员倍感亲切的书,因为这本书可以说是他们当中很多人的入门初心。
本书从最基本的程序理论知识出发,哪怕你完全没有Java基础,也可以通过这本书了解Java基本的程序设计、语言结构、面对对象程序设计等知识。书中还配了大量的代码和课后习题,让读者在了解有关Java的基础知识的时候,也能进行实践深入理解。
非常适合零基础、Java 和编程爱好者来读。
《Java 高并发编程详解:多线程与架构设计》
全书主要分为四个部分:第一部分主要阐述Thread的基础知识;第二部分引入了 ClassLoader; 第三部分详细、深入地介绍volatile关键字的语义;第四部分也是最重要的一部分,站在程序架构设计的角度深入讲解了如何设计高效灵活的多线程应用程序。
上述就是几本学Java要看的书籍。目前Java软件工程师的就业机会和人才需求量是非常大的。再加上Java程序员不仅IT专业企业需要,广大的非IT企业也需要,前景是非常乐观的。
④ 跪求编程大神速速帮忙解决,算法设计判断单词接龙。
intmain()
{
charfirst[20]={0};
charsecond[20]={0};
charkey[20]={0};
//input
printf("pleaseinputfirstword:");
scanf("%s",first);
printf("pleaseinputsecondword:");
scanf("%s",second);
//begin
boolfound=false;
for(inti=0;i<20;i++)
{
chartmp=first[i];
if(tmp==second[0])
{
found=true;
}
if(found==true)
{
intlen=0;
for(intl=i,j=0;l<20,j<20;l++,j++)
{
if(first[l]!=0)
{
key[j]=first[l];
len++;
}
else
break;
}
for(intj=0;j<len;j++)
{
if(key[j]!=second[j])
{
found=false;
memset(key,0x00,sizeof(key)/sizeof(key[0]));
}
}
if(found)
printf("themaxkeywordis:%s ",key);
else
printf("cannotfoundthekeyword!! ");
}
}
return0;
}
⑤ 初中英语课堂,该不该给学生讲语法知识呢
我是一个职高生,中考就是败在英语上的,就是因为老师讲语法,让我搅不清楚,所以我建议不要讲,多讲经典短语,让学生多背经典文章.当然,有时候必须要讲语法,像完形填空.这时就要讲,不但要讲,还要多讲,讲清楚,讲明白.不是每一个学生都是天才.
⑥ delphi 编程 词语接龙
以下是pascal写的递归接龙程序,供参考。
题目描述
有n个单词(1≤n≤50),每个单词由2个小写字母组成,并约1个单词为龙头。
例如:n=7
7个单词为
aaacabdebhhkcd
接龙的方法为前一个单词的第2个字母和后一个单词的第1个字符相同,此时,可以接的方法有:
aa—ac—cd长度为3,即龙上有3个单词
aa—ab—bh—hk长度为4
程序要求给出单词之后,求出最长龙的长度。
输入
文件输入
输入文件格式
n第一行一个整数n
a1b1接下来n行,每行2个字母表示一个单词(单词字母间无空格)
a2b2
……
anbn
输出
一个整数,即最长的接长度(即龙上单词的个数)。
样例输入
8
gd
bd
ea
ab
fd
be
df
be
样例输出
3
===============================================================================
type
charray=array[1..50]ofchar;
boolarray=array[1..50]ofboolean;
var
n:byte;
s:array[1..50]ofstring[30];
x,y:charray;
z:boolarray;
c:char;
i,k:integer;
f:textfile;
max:integer;
procerenext(x,y:charray;z:boolarray;k:integer;c:char;varmax:integer);
var
i:integer;
begin
fori:=1tondo
if(z[i]and(x[i]=c))thenbegininc(k);z[i]:=false;c:=y[i];ifk>maxthenmax:=k;next(x,y,z,k,c,max);end;
end;
begin
assign(f,'jie_long.txt');reset(f);
readln(f,n);
fori:=1tondobegin
readln(f,s[i]);
whiles[length(s[i])]=''dos[i]:=(s[i],1,length(s[i])-1);
x[i]:=s[i][1];
y[i]:=s[i][length(s[i])];
z[i]:=true;
end;
k:=1;
c:=y[1];z[1]:=false;
max:=1;
next(x,y,z,k,c,max);
writeln(max);
end.
⑦ 菜鸟需要帮助,关于英语单词接龙的编程,可以使用c/c#/c++回答
只有pascal,c++有些不会
var
words:array[1..41] of string;
n,max:integer;
map:array[1..41,1..41] of integer;
x:array[1..41] of integer;
y:array[1..41] of boolean;
function xlen(a,b:string):integer;
var i,k:integer;
begin
if length(a)>length(b) then k:=length(b) else k:=length(a);
for i:=1 to k-1 do
if (a,length(a)-i+1,i)=(b,1,i) then exit(i);
exit(0);
end;
procere init;
var i,j:integer;
st:string;
begin
readln(n);j:=1;
for i:=1 to n do
begin
readln(st);
inc(j);words[j]:=st;inc(j);words[j]:=st;
end;
readln(st);words[1]:='1'+st;
n:=2*n+1;
fillchar(map,sizeof(map),0);
for i:=1 to n do
for j:=1 to n do
map[i,j]:=xlen(words[i],words[j]);
end;
procere outit(m:integer);
var i,s:integer;
begin
s:=length(words[1]);
for i:=2 to m do
s:=s+length(words[x[i]])-map[x[i-1],x[i]];
if s>max then max:=s;
end;
procere search(v:integer);
var i:integer;
begin
if v>n then begin outit(n);exit;end;
for i:=2 to n do
if y[i] and (map[x[v-1],i]>0) then
begin
x[v]:=i;y[i]:=false;search(v+1);y[i]:=true;
end;
outit(v-1);
end;
begin
max:=0;init;x[1]:=1;fillchar(y,sizeof(y),true);search(2);writeln(max-1);
end.
⑧ 谁有C语言的简单编程额
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}
⑨ Java进阶适合看哪些书
1.Head First Java
其实这本书是“老少皆宜”的,初学者或者进阶者都适合看,但是初学者一定是配合着教学来看的,否则会很费劲。这本书真心不错,不光技术点全,语言风格还很幽默,不会觉得无聊。
2.Head First 设计模式
本书中会有很多要点总结,幽默对话,练习题还有有名的单词接龙等帮助你更好地了解设计模式。如果你想了解Java中的设计模式,请带走这本书。JAVA战狼班
3.Effective Java
4.Java并发编程实战
5.Java Generics and Collections
6.Java性能优化权威指南
7.Java Puzzlers
8.Head First Object Oriented Analysis and Design
9.Thinking in Java
10.Java程序员修炼之道