问题 单项选择题

某单位招录了10名新员工,按其应聘成绩排名1到10,并用10个连续的四位自然数依次作为他们的工号。凑巧的是每个人的工号都能被他们的成绩排名整除,问排名第三的员工工号所有数字之和是多少( )

A.12
B.9
C.15
D.18

答案

参考答案:A

解析: 根据题意,可确定他们工号的个位数分别为1,2,…,9,0。每个人的工号都能被他们的成绩排名整除,设工号的前三位为a,第1,2,5,0位可不用考虑,则10a+3能被3整除,10a+4能被4整除,…,10a+9能被9整除,故a为3,4,6,7,8,9的最小公倍数,最小公倍数为504,则工号分别为5041,5042,5043,…,5049,5050,第三位员工工号所有数字之和5+0+4+3=12。故选A。
另解:本题也可以用代入法,先确定工号的尾数为1,2,…,9,0,则第三名员工的工号加6之后是9的倍数,分别代入选项,只有A符合。故选A。

填空题
填空题

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

[说明]

HufTman树又称最优二叉树,是一类带权路径长度最短的树,在编码中应用比较广泛。

构造最优二叉树的Huffman算法如下:

①根据给定的n各权值{W1,w2,…,wn)构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵树Ti中只有一个带权为wi的根节点,其左右子树均空。

②在F中选取两棵根节点的权值较小的树作为左右子树,构造一棵新的二叉树,置新构造二叉树的根节点的权值为其左右予树根节点的权值之和。

③从F中删除这两棵树,同时将新得到的二叉树加入到F中。

重复②③,直到F中只剩一棵树为止。

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

#define INT MAX 10000

#define ENCODING LENGTH 1000

typedef enum(none,left_child,right_child) Which;

/*标记是左孩子还足右孩子*/

typedef char Elemtype;

typedef struct TNode{//Huffman树节点

Elemtype letter;

int

weight; //权值

int parent; //父节点

Which sigh;

char *code; //节点对应编码

}HTNode,*HuffmanTree;

int n;

char coding[50];//储存代码

[函数]

void Select(HuffmanTree HT,int end,int *sl,int *s2)

/*在0~END之间,找出最小和次小的两个节点序号,返吲S1、S2*/

{

int i;

int min 1=INT_MAX;

int min 2=INT_MAX;

for(i=0;i<=end;i++){/*找最小的节点序号*/

if(( (1) )&&(HT[i].weight<minl)){

*s1=i;

min 1=HT[i].weight;

}

}

for(i=0;i<=end;i++){/*找次小节点的序号*/

if((HT[i].parent==0)&&( (2) )

&&(min 2>HT[i].weight)){

*s2=i;

min 2=HT[i].weight;

}

}

}

void HuffmanTreeCreat(HuffmanTree&HT)/*建立HUFFMAN树*/

{

int i;

int m=2*n-1;

int s1,s2;

for(i=n;i<m;i++){

Select( (3) );

HT[s1].parent=i;

HT[s2].parent=i;

HT[s1].sigh=left child;

HT[s2].sigh=right child;

HT[i].weight= (4)

}

}

void HuffmanTreeEncoding(char sen[],HuffmanTree HT)

{ /*将句子进行编码*/

int i=0;

int j;

while(sen[i] !=’\0’){

for(j=0;j<n;j++){

if(HT[j].letter==sen[i])(/*字母吻合则用代码取代*/

strcat(coding, (5) );

break;

}

}

i++;

if (Sen [1]==32) i++;

}

printf("\n%s",coding);

}

(3)处填()。