2016年上半年程序员下午题答案及解析.pdfVIP

2016年上半年程序员下午题答案及解析.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

一、问答题

1、阅读以下说明和流程图,填补流程图和问题中的空缺(1)~(5),将解答填入答题

纸的对应栏内。

【说明】

设整型数组A[1:N]每个元素的值都是1到N之间的正整数。一般来说,其中会有一

些元素的值是重复的,也有些数未出现在数组中。下面流程图的功能是查缺查重,

即找出A[1:N]中所有缺的或重复的整数,并计算其出现的次数(出现次数为0时

表示缺)。流程图中采用的算法思想是将数组A的下标与值看作是整数集[1:N]加

上的一个映射,并用数组C[1:N]记录各整数出现的次数,需输出所有缺少的或重

复的数及其出现的次数。

【流程图】

【问题】

如果数组A[1:5]的元素分别为{3,2,5,5,1},则算法流程结束后输出结果为

(5)输出格式为:缺少或重复的元素,次数(0表示缺少)

参考答案:

(1)A[i]

(2)C[k]+1

(3)1

(4)k

和C[k]

(5)4,{1,1,1,0,2}

解析:

(1)

根据说明,算法需要遍历数组A的每个元素,因此空白处应填写表示数组元素的值

,即A[i]。

(2)

在遍历过程中,对于数组A中的每个元素A[i],需要在数组C中对应的元素C[A[i]]

上计数。因此空白处应填写增加计数的表达式,即C[k]+1,其中k代表A[i]的值。

(3)

在初始化数组C的环节,需要将所有元素初始化为0,表示对应的整数在数组A中未

出现。因此空白处填写0,即初始值为1。

(4)

在计数完成后,需要遍历数组C,找出不等于初始值的元素,这些元素对应的值即

为在数组A中出现过但次数不为初始值的整数。因此空白处应填写变量k和C[k],

表示当前遍历到的数组C中的元素和其对应的值。此时还需要记录这些元素的原始

下标,用于输出缺少或重复的元素的位置信息。由于数组下标从1开始,因此这里

应该填写当前元素的下标即可。由于原始下标已经丢失,无法直接获取,因此需要

通过其他方式记录或计算。此处暂不涉及具体实现细节。

(5)

根据题目给出的数组A[1:5]的元素为{3,2,5,5,1},经过算法处理后,得到缺

少的元素为无(因为数组中的元素都是完整的),重复的元素为5(出现了两次)

。因此输出格式为缺少或重复的元素及其出现次数,即{无,5,

2}。注意此处应为数字本身和出现次数的组合,而非下标和出现次数的组合。

2、

阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明1】

递归函数is_elem(charch,char

*set)的功能是判断ch中的字符是否在set表示的字符集合中,若是,则返回1,否则

返回0。

【C代码1】

intis_elem(charch,char*set)

{

If(*set==‘\0’)

return0;

else

If((1))

return1;

else

returnis_elem((2))

}

【说明2】

函数char*combine(char*setA,char

*setB)的功能是将字符集合A(元素互异,由setA表示)和字符集合B(元素互异,

由setB表示)合并,并返回合并后的字符集合。

【C代码2】

char*combine(char*setA,char*setB)

{

inti,lenA,lenB,lenC;

lenA=strlen(setA);

lenB=strlen(setB);

char*setC=(char*)malloc(lenA+lenB+1);

if(!setC)

returnNULL;

strncpy(setC,setA,lenA);//将setA的前lenA个字符复制后存入setC

lenC=(3);

for(i=0;i<lenB;i++)

if((4))//调用is_elem判断字符是否在setA中

setC[lenC++]=setB[i];

(5)=‘/0’;//设置合并后字符集的结尾标识

returnsetC;

}

参考答案:

(1)set[0]==ch或*set==ch或其他等价形式

(2)ch,set+1或ch,++set或

文档评论(0)

喵呜刷题 + 关注
实名认证
文档贡献者

来喵呜刷题,完成你的职业蜕变!

1亿VIP精品文档

相关文档