[主观题]

阅读以下说明和C代码,将应填入(n)处的字句写在对应栏内。

[说明]

下面程序用来将打乱的单词还原为原来的次序,比如将rty还原为try。单词的原来次序存储于wordlist.txt文件中,原则上可用穷举法(rty对应的穷举为:rty、ryt、try、tyr、ytr、yrt),但考虑到破译速度,采用如下方法。

注意到单词列表中不存在组成字符完全相同的单词(如Hack12与Hack21包含完全相同的字符),因此将单词中的字符进行重组再进行比较,例如,try单词重组为rty(按ASCⅡ码顺序),这样不管打乱的单词是什么顺序,只要是由r、t、y三个字母组成的均破译为try,大大提高破译速度。程序中借助二叉排序树以进一步提高查找效率,二叉排序树左子树(如果有)上的节点对应的值均小于根节点的值,右子树(如果有)上的节点对应的值均大于根节点的值。

函数中使用的符号定义如下:

#define NumberofWords 1275//单词总数

#define MaxLength 10//最长单词所含字符数

char WordList[NumberofWords][MaxLength];//存储单词列表

int cmp(Node *q,Node *p);//q与p比较。p小,返回负值;P大返回正值:相等,返回0

typedef struct Node(//二叉树节点

char *eleLetters;//重组后的字符串

int index;//对应单词表中的下标

struct Node *lChiId,*rChiid;//左右子节点

}Node;

[C代码]

void reCompose(Node *p,char *temp)

//重纰,亦即将temp字符串中的字符升序排序,存储于p节点中

//采用直接插入排序法

{

char c;

strcpy(p->eleLetters,temp);//

int len=strlen(temp);

int i,j,k;

for(i=0;i<len-1;i++){

k=i;

for(j=i+1;j<lan;j++){

if(p->eleLetters[j]<P->eleLetters[k])k=J;

}

if( (1) ){

C.=P->eleLetters[i];

P->eleLetters[i]=P->eleLetters[k];

P->eleLetters[k]=c;

}//if

}//for

};

int find(Node &root,char *temp)

//在二叉排序树root中查找与temp匹配的单词。

//若匹配返回相应单词在WordList中下标;若查找失败,返回-1

{

Node *P,*q;

int flag;

P=(2);//临时存储

reCompose(p,temp);//将temp重组

q=&root;

while((flag=(3))&&q !=NULL){

if(flag<0){//搜索左子树

q=q->lChiid;

}else(//搜索右子树

q=q->rChild;

}

}//while

if(flag==0){//找到匹配的,保存下标

return (4);

}

}

if( (5) ){//查找失败

printf("cant unscramble the following word:%s",temp);;

return -1;

}

};(1)

参考答案与解析:

相关试题

阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。 (说明) 下面

[试题]阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。(说明)下面的Java程序演示了程序竞争资源(Mutex的实例对象)而引起程序死锁的一种例子。(Java程序)import java.applet.*;import java.awt.*;//此处声明一个互斥类class Mutex { }class A extends (1){private Mutex first,second;public A(Mutex f,Mutex s){first = f;second = s;}publ

  • 查看答案
  • 阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。 (说明) 下面

    [主观题]阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。(说明)下面的Java程序演示了如何使用Applet在网页上显示图形用户界面CUI(graphical user interface),该实例显示一个时钟。每当浏览器显现Applet的内容时都调用start()函数,让applet得以开始工作(尤其时那些被stop()函数所关闭的工作)。每当浏览器不再显现Applet的内容时都调用stop()函数,让applet得以关闭某些甚耗资源的工作调用destroy()函数之后也会调用此函数。

  • 查看答案
  • 阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。 (说明) 下面

    [主观题]阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。(说明)下面的Java程序演示了如何在用户等待载入主程序时显示logo图片的例子。logo图片mylogo.gif存放在文件夹image下面。显示logo图片的是一个线程类logo。(Java程序)import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.ImageIcon.*;import java.lang.Runnable

  • 查看答案
  • 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。 (说明) “背包

    [试题]阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。(说明)“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn。希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。如下程序均能求得“背包问题”的一组解,其中程序1是“背包问题”的递归解法,而程序2是“背包问题”的非递归解法。(程序1)include<stdio.h>define N 7define S 15int w[N+1]={0,1,4

  • 查看答案
  • 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。(程序说明) 著名

    [试题]阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。(程序说明)著名的四色定理指出任何平面区域图均可用4种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。程序中用1~4表示4种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻:矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i所着颜色。(程序)incl

  • 查看答案
  • 阅读以下说明和C£«£«程序,将应填入(n)处的字句写在对应栏内。[说明] 以下

    [试题]阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。[说明]以下程序的功能是统计学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(PASS),而后百分之三十的学生定为不合格(FAIL)。例如,当输入4名学生的姓名和成绩“Alice 67 Mary 90 Tom 56 John 88”后,程序的执行结果如下:姓名 成绩 合格否Mary 90 PASSJohn 88 PASSA.lice 67 FAILTom 56 FAIL[C++程序]inclu

  • 查看答案
  • 阅读以下说明和java代码,将应填入(n)处的字句写在对应栏内。[说明] 本程序

    [试题]阅读以下说明和java代码,将应填入(n)处的字句写在对应栏内。[说明]本程序中预设了若干个用户名和口令。用户输入正确的用户名后,可以查找对应的口令,一旦输入结束标记“end”,程序结束。[Java代码]import java. io. *:public class User {public String user;public Siring pass;public User() { }public User( String u,String p) {user=u;pass=p;}public S

  • 查看答案
  • 阅读以下说明和Java程序,将应填入(n)处的字句写在对应栏内。 [说明] 下面

    [试题]阅读以下说明和Java程序,将应填入(n)处的字句写在对应栏内。[说明]下面程序是为汽车市场编制的一个程序的一部分。其中automobile是基类。[Java程序]class MainJava{public static void main(String agr[]){car sedan=new car();sedan.initialize(24,20.0,4);System.out.println ("The sedan can travel"+ (1) +"miles./n");Sys

  • 查看答案
  • 阅读以下说明C£«£«代码,将应填入(n)处的字句写在对应栏内。[说明] 以下程

    [试题]阅读以下说明C++代码,将应填入(n)处的字句写在对应栏内。[说明]以下程序的功能是实现堆栈的一些基本操作。堆栈类stack共有三个成员函数:empty判断堆栈是否为空;push进行人栈操作;pop进行出栈操作。[C++程序]include "stdafx. h"include <iostream, h>eonst int maxsize = 6;class stack {float data[ maxsize];int top;public:stuck(void);~ stack(void)

  • 查看答案
  • 阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。(说明) 下面代

    [试题]阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。(说明)下面代码里,instr是一个抽象类,它被两个子类wind和rain分别实现,而brass又继承了wind类,并覆盖了play方法。(程序)(1) class instr{(2) Void play();}class wind (3) instr{void play(){System.out.println("wind play!");}}class rain extends instr {void play(){Syste

  • 查看答案
  • 阅读以下说明和C代码,将应填入(n)处的字句写在对应栏内。 [说明] 下面程序用