2021上半年程序员下午题

时间:2022-05-19 18:05:19 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
2021上半年程序员下午题



1 阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。【说明】下面流程图的功能是:在给定的一个整数序列中查找最长的连续递增子序列。设序列存放在数组A[1:n](n≥2)中,要求寻找最长递增子序列A[KK+L1](A[K]A[K+1]<…<A[K+L1])。流程图中,用KjLj分别表示动态子序列的起始下标和长度,最后输出最长递增子序列的起始下标K和长度L。例如,对于序列A={12445689458},将输出K=4L=5。【流

程图】注:循环开始框内应给出循环控制变量的初

值和终值,默认递增值为1,格式为:循环控制变量=初值,终值

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

下面的代码运行时,从键盘输入一个四位数(各位数字互不相同,可以有0),取出组成该四位数的每一位数,重组成由这四个数字构成的最大四位数max4和最小四位数

min4(0时为三位数),计算max4min4的差值,得到一个新的四位数。若该数不等于6174,则重复以上过程,直到得到6174为止。

例如,输入1234,则首先由4321-1234,得到3087;然后由8730-378,得到8352最后由8532-2358,得到6174 C代码】

#include int difference(int a[]) { int t,i,j,max4,min4

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

for(j=i+1___________(1)j++) if(a[j]a[t])__________(2) if(t!=i) {

int temp=a[t] a[t]=a[i] a[i]=temp } }

max4=___________(3) min4=___________(4) return max4-min4 } int main() { int na[4]

printf(\\ Scanf(\d\&n) while(n!=6174){


a[0]=__________(5) *n的千位数字* a[1]=n10010 *n的百位数字* a[2]=n1010 *n的十位数字* a[3]=__________(6) *n的个位数字* n=difference(a) } return 0 }

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

对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快

速排序,最终得到非递减的有序序列。函数quicksort(int a[]int n)实现了快速排序,其中,n个整数构成的待排序列保存在数组元素a[0]a[n1]中。 C代码】 #include

Void quicksort(int a[] int n) { int ij

int pivot=a[0] //设置基准值 i=0j=n1 while (ij){

while(ij&&___________(1)) j-- //大于基准值者保持在原位置 if (ij) { a[i]=a[j]i++)

while(ij&&__________(2)) i++ //不大于基准值者保持在原位置 if (ij) {a[j]=a[i]j--} }

a[i]=pivot //基准元素归位 if(i1)

___________(3) //递归地对左子序列进行快速排序 if(n―i11) ___________(4) //递归地对右子序列进行快速排序 } int main() {

int iarr[]={235697518421167)




您的阅读,祝您生活愉快。


本文来源:https://www.wddqw.com/doc/20629149df88d0d233d4b14e852458fb760b3836.html