早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->软考中级 -->

阅读下列说明和C代码,回答问题l至问题3.将解答写在答题纸的对应栏内。【说明】计算一个整数数组a的

题目

阅读下列说明和C代码,回答问题l至问题3.将解答写在答题纸的对应栏内。

【说明】

计算一个整数数组a的最长递增子序列长度的方法描述如下:

假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤i<n)为结尾元素的最长

递增子序列的长度,则数组a的最长递增子序列的长度为器;其中b[i]满足最优子结构,可递归定义为:

【c代码】

下面是算法的c语言实现。

(1)常量和变量说明

a:长度为n的整数数组,待求其最长递增子序列

b:长度为n的数组,b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度,

其中0≤i<n

len:最长递增子序列的长度

i.j:循环变量

temp,临时变量

(2)C程序

include <stdio . h>

int maxL (int *b. int n) {

int i. temp =0;

For(i = 0; i < n; i++){

if (b[i] > temp )

Temp= b[i];

}

Return temp;

【问题l】(8分)

根据说明和C代码,填充C代码中的空(1)~(4)。

【问题2】(4分)

根据说明和C代码,算法采用了(5)设计策略,时间复杂度为(6)(用O符号表示)。

【问题3】(3分)

已知数组a={3,10,5,15,6,8},根据说明和C代码,给出数组b的元素值。

参考答案
正确答案:
本题考查算法设计与分析以及用C程序设计语言来实现算法的能力。此类题目要求考生认真阅读题目对问题的描述,理解算法思想,并会用C程序设计语言来实现。【问题1】根据题干描述,用一个数组b来记录数组a每个子数组的最长递增子序列的长度,即b[i]记录a[0..i]的最长递增子序列的长度。首先,只有一个元素的数组的最长递增子序列的长度为1,即给b[0]直接赋值1。因此,空(1)处填写“b[0]=1”。两重for循环中,第一重是从a数组的第二个元素开始,考虑每个子数组a[0....II]的最长递增子序列的长度,第二重是具体的计算过程。考虑子数组a[0..I],其最长递增于序列的长度应该等于子数组a[O.i-l]中的比元素a[i]小的元素的最长递增子序列的长度加1,当然,可能存在多个元素比元素a[i]小,那么存在多个最长递增子序列的长度,此时,取最大者。因此,空处填写j
看了阅读下列说明和C代码,回答问题...的网友还看了以下: