2018年下半年软件设计师下午试题

news/2024/11/29 0:47:48/

试题四(15分)

给定一个字符序列B=b1b2….bn,其中bi∈{A,C,G,U}。B上的二级结构是一组字符对集合S={(bi,bj)},其中i,j∈{1,2,….,n},并满足以下四个条件:

(1)S中的每对字符是(A,U),(U,A),(C,G)和(G,C)四种组合之一;

(2)S中的每对字符之间至少有四个字符将其隔开,即i<j-4;

(3)S中每一个字符(记为bk)的配对存在两种情况:bk不参与任何配对;bk和字符bt配对,其中t<k-4;

(4)(不交叉原则)若(bi,bj)和(bk,bl)是S中的两个字符对,且i<k,则i<k<j<l不成立。

B的具有最大可能字符对数的二级结构S被称为最优配对方案,求解最优配对方案中的字符对数的方法如下:

假设用C(i,j)表示字符序列bibi+1....bj的最优配对方案(即二级结构S)中的字符对数,则,C(i,j)可以递归定义为:

下面代码是算法的C语言实现,其中

n:字符序列长度

B[]:字符序列

C[][]:最优配对数量数组

【C代码】
 

#include<stdio.h>
#include<stdlib.h>
#define LEN 100/*判断两个字符是否配对*/
int isMatch(char a,char b){if ((a=='A'&&b=='U')||( a=='U'&&b=='A'))return 1;if ((a=='C'&&b=='G')||( a=='G'&&b=='C'))return 1;return 0;}/*求最大配对数*/
int RNA_2(char B[LEN],int n){int i,j,k,t;int max;int C[LEN][LEN]={0};for(k=5;k<=n-1;k++){for(i=1;i<=n-k;i++){j=i+k;max=C[i][j-1];//填空1for(t=1;t<=j-4;t++){//填空2if(isMatch(B[t],B[j])&&max<C[i][t-1]+1+C[t+1][j-1])//填空3max=C[i][t-1]+1+C[t+1][j-1];} C[i][j]=max;printf("C[%d][%d]=%d--",i,j,C[i][j]);}}return C[i][j];//填空4
}

问题1 (8分)

根据题干说明,填充 C 代码中的空(1)-(4)。

问题2 (4分)

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

算法的时间复杂度为(  6  ),(用O表示)。

问题3 (3分)

给定字符序列 ACCGGUAGU ,根据上述算法求得最大字符对数为(  7  )。
 

#include<stdio.h>
#include<stdlib.h>
#define LEN 100/*判断两个字符是否配对*/
int isMatch(char a,char b){if ((a=='A'&&b=='U')||( a=='U'&&b=='A'))return 1;if ((a=='C'&&b=='G')||( a=='G'&&b=='C'))return 1;return 0;}/*求最大配对数*/
int RNA_2(char B[LEN],int n){int i,j,k,t;int max;int C[LEN][LEN]={0};for(k=5;k<=n-1;k++){for(i=1;i<=n-k;i++){j=i+k;max=C[i][j-1];//填空1for(t=1;t<=j-4;t++){//填空2if(isMatch(B[t],B[j])&&max<C[i][t-1]+1+C[t+1][j-1])//填空3max=C[i][t-1]+1+C[t+1][j-1];} C[i][j]=max;printf("C[%d][%d]=%d--",i,j,C[i][j]);}printf("\n");}return C[i][j];//填空4
}int main(){char B[LEN]="ACCGGUAGU";int r = RNA_2(B,9);return 0;
}

试题六(15分)

某航空公司的会员积分系统将其会员划分为:普卡 (Basic) 、银卡(Silver)和金卡 (Gold)

三个等级。非会员 (NonMember)可以申请成为普卡会员。会员的等级根据其 一年内累积的里程数进行调整。描述会员等级调整的状态图如图 6-1 所示 。现采用状态 (State) 模式

实现上述场景,得到如图 6-2 所示的类图。

【Java代码】 

package test_2018_2;class FrequentFlyer{CState state;double flyMiles;public void setState(CState state) {this.state = state;}public FrequentFlyer() {this.state = new CNoCostomer();this.flyMiles = 0;this.setState(this.state);}public void travel(int miles){double bonusMiles = state.travel(miles, this);flyMiles=flyMiles+bonusMiles;}
}abstract class CState{public int flyMiles;    //里程数public abstract double travel(int miles, FrequentFlyer context);     //填空1//根据累积里程数调整会员等级
}class CNoCostomer extends CState{//非会员@Overridepublic double travel(int miles, FrequentFlyer context) {System.out.println("Your travel will not account for points.");return miles;   //不累积里程数}
}class CBasic extends CState{   //普卡会员@Overridepublic double travel(int miles, FrequentFlyer context) {if (context.flyMiles>=25000&&context.flyMiles<5000){context.setState(new CSliver());      //填空2}if (context.flyMiles>=50000){context.setState(new CGold());//填空3}return miles;}
}class CGold extends CState{//金卡会员@Overridepublic double travel(int miles, FrequentFlyer context) {if (context.flyMiles>=25000&&context.flyMiles<50000){context.setState(new CSliver());//填空4}if (context.flyMiles<=25000){context.setState(new CBasic());//填空5}return miles+0.5*miles; //累积里程数}
}class CSliver extends CState{//银卡会员@Overridepublic double travel(int miles, FrequentFlyer context) {if (context.flyMiles<=25000){context.setState(new CBasic());}if (context.flyMiles>50000){context.setState(new CGold());}return miles+0.25*miles; //累积里程数}
}public class CardTest {public static void main(String[] args) {}
}


http://www.ppmy.cn/news/61767.html

相关文章

ESP32-C2开发板简介

C2是一个芯片采用4毫米x 4毫米封装&#xff0c;与272 kB内存。它运行框架&#xff0c;例如ESP-Jumpstart和ESP造雨者&#xff0c;同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统&#xff0c;受到了全球用户的信赖。它由支持Espressif以及所有…

让你的C++代码变得更加高效和优雅的技巧(第一集)

​ C 是一门强大的编程语言&#xff0c;它被广泛应用于各种领域&#xff0c;包括游戏开发、系统编程、嵌入式系统等。但是&#xff0c;C 也是一门复杂的语言&#xff0c;需要程序员有一定的技巧才能写出高效和优雅的代码。在本文中&#xff0c;我们将介绍一些让你的 C 代码变…

Files.readString(path, StandardCharsets.UTF_8);提示找不到符号的解决方案

Files.readString(path, StandardCharsets.UTF_8);提示找不到符号&#xff1a; 符号: 方法 readString(java.nio.file.Path,java.nio.charset.Charset) 位置: 类 java.nio.file.Files 如果你正在使用的是 JDK 11 或更早版本的 JDK&#xff0c;则 Files.readString(path, ch…

1.SpringCloud技术

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

selenium的基本使用

Selenium 是一个自动化测试工具&#xff0c;可以模拟用户在浏览器中的操作。下面是一些常用的 Selenium 语法&#xff1a; 创建一个 WebDriver 对象&#xff1a; from selenium import webdriver driver webdriver.Firefox() 导航到一个 URL&#xff1a; driver.get(http…

【Hydro】半图解法调洪演算步骤,附Python代码

说明 半图解法计算步骤如下: (1)根据水位&#xff5e;库容关系、水位&#xff5e;泄流关系以及计算时段等绘制辅助曲线&#xff1b; (2)确定起调水位 Z 1 Z_1 Z1​及相应的 q 1 q_1 q1​、 V 1 V_1 V1​计算各时段平均入库流量 Q p Q_p Qp​&#xff1b; (3)在水位坐标轴上确定…

详细版简单易学版TypeScript各类型声明

假如本地新建了一个b.ts文件 安装TypeScript&#xff1a;npm install -g typescript 编译代码&#xff1a;tsc b.ts 运行js&#xff1a;node b.js 在终端输入 tsc -init 生成 tsconfig.json 文件 类型注解&#xff1a;TypeScript里的类型注解是一种轻量级的为函数或变量添加约束…

vue3+webpack4 前端优化首屏时间

项目背景 中小项目&#xff0c;Vue-cli3 vue2 webpack4 目标 缩短白屏时间&#xff0c;用户能够更快的看到我的页面&#xff01; 白屏时间&#xff1a;从打开页面到看到页面&#xff0c;中间白屏停留的时间。 方向 1.减少资源体积&#xff0c;从而缩短请求时间 2.减少资…