單詞接龍編程
① 關於 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程序員修煉之道