2015年11月 程序员 下午题答案及解析.pdfVIP

  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、阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏

[说明]

下面流程图的功能是:在给定的一个整数序列中查找最长的连续递增子序列。设序

列存放在数组A[1:n](n≥2)中,要求寻找最长递增子序列A[K:K+L-

1](即A[K]<A[K+1]<…<A[K+L-

1])。流程图中,用Kj和Lj分别表示动态子序列的起始下标和长度,最后输出最长

递增子序列的起始下标K和长度L。

例如,对于序列A={1,2,4,4,5,6,8,9,4,5,8},将输出K=4,L=5。

[流程图]

注:循环开始框内应给出循环控制变量的初值和终值,默认递增值为1,格式为:

循环控制变量=初值,终值

参考答案:

n-1

Lj+1→Lj

Lj>L

Kj

i+1

解析:

本题考查的是理解和绘制程序流程图的能力,特别是在设计算法时,如何在一个整

数序列中查找最长的连续递增子序列。查找的方法是从头开始逐个与后面邻接的数

进行比较。

一、关于循环开始的部分,由于需要比较A[i]与A[i+1],因此循环应从1到n-

1,所以(1)处应填n-1。

二、当A[i]<A[i+1]时,表示发现了连续递增的情况,此时应增加动态连续递增序

列的长度,因此(2)处应填写Li+1→Lj。

三、当A[i]<A[i+1]不成立时,表示之前的连续递增已经结束。此时需比较当前的

动态长度Li与记录的最大长度L。所以(3)处应填Lj>L。

四、当Lj>L时,表示找到了更长的连续递增子序列,需要更新记录的最大长度和

起始下标,因此(4)处应填写Lj→L和Kj→K。

五、当Lj→L不成立时,表示当前子序列并非最长,需要从下一个位置重新开始查

找,因此(5)处应填写i+1,并且动态长度Lj需要重置为1。

最后,循环结束后还需要再次比较最后一个动态连续子序列与之前的记录,以确保

找到的最长连续递增子序列是真正的最长序列。

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

[说明]

下面的代码运行时,从键盘输入一个四位数(各位数字互不相同,可以有0),取出

组成该四位数的每一位数,重组成由这四个数字构成的最大四位数max4和最小四

位数min4(有0时为三位数),计算max4与min4的差值,得到一个新的四位数。若该

数不等于6174,则重复以上过程,直到得到6174为止。

例如,输入1234,则首先由4321-1234,得到3087;然后由8730-

378,得到8352;最后由8532-2358,得到6174。

[C代码]

#include<stdio.h>

intdifference(int

a[])

(int

t,i,j,max4,min4;

for(i=0;i<3;i++){/*用简单选择排序法将a[0]~a[3]按照从大到小的顺序排列*/

t=i;

for(j=i+1;______;

j++)

if(a[j]>a[t])______;

if(t!=i){

inttemp=a[t];

a[t]=a[i];a[i]=temp;

}

}

max4=______;

min4=______;

returnmax4-min4;

}

intmain()

{int

n,a[4];

printf(input

apositivefour-digitnumber:);

scanf(%d,n);

while(n!=6174){

a[0]=______;

/*取n的千位数字*/

a[1]=n/100%10;

/*取n的百位数字*/

a[2]=n/10%10;

/*取n的十位数字*/

a[3]=______;

//取n的个位数字*/

n=difference(a);

}

return0;

}

参考答案:

j<4或等价形式

文档评论(0)

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

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

1亿VIP精品文档

相关文档