当前位置:首页计算机类软件水平考试中级软件设计师->阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸对

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

【说明】 计算两个字符串x和y最长公共子串(Longest Common Substring)。 假设字符串x和字符串y长度分别为m和n,用数组c元素c[i][j]记录x中前i个字符和y中前j个字符最长公共子串长度。c[i][j]满足最优子结构,其递归定义为:

中级软件设计师,章节练习,基础复习,中级软件设计师练习

计算所有c[i][j](0 ≤i ≤ m,0 ≤j ≤ n)值,值最大c[i][j]即为字符串x和y最长公共子串长度。根据该长度即i和j,确定一个最长公共子串。【C代码】(1)常量和变量说明 x,y:长度分别为m和n字符串 c[i][j]:记录x中前i个字符和y中前j个字符最长公共子串长度 max:x和y最长公共子串长度 maxi, maXj:分别表示x和y某个最长公共子串最后一个字符在x和y中位置(序号) (2)C程序#include

< stdio.h>#include

< string.h>int c[50][50];int maxi;int maxj;int lcs(char

*x, int m, char *y, int n) { int i, j; int max= 0; maxi= 0; maxj = 0;for ( i=0;

i < =m ; i++) c[i][0] = 0;for (i =1;

i < = n; i++) c[0][i]=0;for (i =1;

i < = m; i++) { for (j=1; j < = n; j++) { if (

(1) ) {c[i][j] = c[i

-1][j -1] + 1;if(max < c[i][j])

{ (2)

; maxi = i; maxj =j; }}else (3)

; } } return max;}void

printLCS(int max, char *x) { int i= 0; if (max == 0) return; for (

(4) ; i < maxi; i++)printf("%c",x[i]);}void main( ){ char* x= "ABCADAB"; char*y= "BDCABA"; int max= 0; int m = strlen(x); int n = strlen(y); max=lcs(x,m,y,n); printLCS(max , x);}

【问题1】(8分)

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

【问题2】(4分)

根据题干说明和以上C代码,算法采用了 (5) 设计策略。

分析时间复杂度为 (6) (用O符号表示)。

【问题3】(3分)

根据题干说明和以上C代码,输入字符串x= "ABCADAB’,'y="BDCABA",则输出为 (7) 。

答案:
本题解析:

【问题1】(8分)答案:(1)x[i-1]= =y[j-1] (2)max=c[i][j](3)c[i][j]=0 (4)i=maxi-max

【问题2】(4分)答案:动态规划、 O(m×n)或O(mn)

【问题3】(3分)答案:AB根据题干和C代码,计算出下表值。

中级软件设计师,章节练习,基础复习,中级软件设计师练习

最大值为2。在计算过程中,我们记录第一个最大值,即表中阴影部分元素,因此得到最长公共子串为AB。

更新时间:2022-07-18 08:07
纠错

你可能感兴趣的试题

单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.V(S2)和P(S4)
  • B.P(S2)和V(S4)
  • C.P(S2)和P(S4)
  • D.V(S2)和V(S4)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.V(S1)P(S2)和V(S3)
  • B.P(S1)V(S2)和V(S3)
  • C.V(S1)V(S2)和V(S3)
  • D.P(S1)P(S2)和V(S3)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S4)和V(S4)V(S5)
  • B.V(S5)和P(S4)P(S5)
  • C.V(S3)和V(S4)V(S5)
  • D.P(S3)和P(S4)V(P5)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S3)和V(S4)V(S5)
  • B.V(S3)和P(S4)P(S5)
  • C.P(S3)和P(S4)P(S5)
  • D.V(S3)和V(S4)V(S5)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S2)和P(S4)
  • B.P(S2)和V(S4)
  • C.V(S2)和P(S4)
  • D.V(S2)和V(S4)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.V(S1)、P(S1)和V(S2)V(S3)
  • B.P(S1)、V (S1)和V(S2)V(S3)
  • C.V(S1)、V(S2)和P(S1)V(S3)
  • D.P(S1)、V(S2)和V(S1)V(S3)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.序列图
  • B.状态图
  • C.通信图
  • D.活动图
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.合并分叉
  • B.分支
  • C.合并汇合
  • D.流
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.产甲2套,乙3套
  • B.生产甲1套,乙4套
  • C.生产甲3套,乙4套
  • D.生产甲4套,乙2套
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.见图A
  • B.见图B
  • C.见图C
  • D.见图D
查看答案