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

news2024/11/19 15:20:28

试题四(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];//填空1

       for(t=1;t<=j-4;t++){//填空2
         if(isMatch(B[t],B[j])&&max<C[i][t-1]+1+C[t+1][j-1])//填空3
            max=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];//填空1

       for(t=1;t<=j-4;t++){//填空2
         if(isMatch(B[t],B[j])&&max<C[i][t-1]+1+C[t+1][j-1])//填空3
            max=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{//非会员
    @Override
    public double travel(int miles, FrequentFlyer context) {
        System.out.println("Your travel will not account for points.");
        return miles;   //不累积里程数
    }
}

class CBasic extends CState{   //普卡会员
    @Override
    public 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{//金卡会员
    @Override
    public 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{//银卡会员
    @Override
    public 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.coloradmin.cn/o/502568.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络】-- IP协议

应用层&#xff08;http、https&#xff09;&#xff1a; 数据的使用。传输层&#xff08;UDP、TCP&#xff09;&#xff1a;网络通讯的细节&#xff0c;将数据可靠的从A主机跨网络送到B主机。网络层&#xff08;IP&#xff09;&#xff1a;提供一种能力&#xff0c;将数据从A主…

如何让任何小程序都支持在windows系统中打开?

随着小程序的发展&#xff0c;出现了越来越多小程序在PC端打开的需求。很多程序员同行都想了解&#xff1a;小程序支持在windows系统、mac、统信UOS等桌面操作系统中打开吗&#xff1f; 答案当然是&#xff1a;可以&#xff01; 本文就基于作者自身的经验&#xff0c;给大家介…

IPWorks SSH 2022.0.8505 C++ Edition Crack

IPWorks SSH 2022.0.8505 C Edition 轻松将安全外壳 &#xff08;SSH&#xff09; 安全性集成到您的互联网应用程序中。IPWorks SSH 库包括支持 SSH 的客户端、服务器和代理组件&#xff0c;支持强 SSH 2.0 加密和高级加密。 SSH库 SSH 文件传输和通信 借助 IPWorks SSH&#x…

【嵌入式环境下linux内核及驱动学习笔记-(10-内核内存管理)】

目录 1、linux内核管理内存1.1 页1.2 区1.2.1 了解x86系统的内核地址映射区&#xff1a;1.2.2 了解32位ARM系统的内核地址映射区&#xff1a; 2、内存存取2.1 kmalloc2.1.1 kfree2.1.2 kzalloc 2.2 __get_free_page函数族2.2.1 free_page2.2.2 __get_free_pages()2.2.3 free_pa…

20230502 - 二叉树1 | 二叉树理论基础、二叉树的递归遍历

1、二叉树理论基础篇 二叉树可以链式存储&#xff0c;也可以顺序存储。 用数组来存储二叉树如何遍历的呢&#xff1f; 如果父节点的数组下标是 i&#xff0c;那么它的左孩子就是 i * 2 1&#xff0c;右孩子就是 i * 2 2。 深度优先遍历 前序遍历&#xff08;递归法&…

Android 页面滑动悬浮资源位动画+滑动监听解决方案

一、介绍 在日常业务开发过程中&#xff0c;我们有好多资源位悬浮在页面上&#xff0c;特别是电商以及促销页面&#xff0c;有些公司恨不得把整个页面像叠汉堡一样&#xff0c;一层一层加内容&#xff0c;目的是想让更多的人通过他们的资源来完成更便捷的操作。 但是资源是会覆…

HarmonyOS版的“抖音”长啥样?有图有真相

“鸿蒙系统实战短视频App 从0到1掌握HarmonyOS”系列课程是面向HarmonyOS实战的视频教程&#xff0c;该课程会通过构建一个真实的短视频App来向读者展示HarmonyOS的全过程。 本节将演示基于HarmonyOS短视频App的核心功能。通过了解该App的功能&#xff0c;也能初步对本课程的内…

C++——类和对象(4)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年5月8日 内容&#xff1a;C类和对象内容讲解 目录 前言&#xff1a; 1.操作符重载&#xff08;续&#xff09;&#xff1a; 前置和后置&#xff1a; 日期减日期&#xff1a; <<操作符&#xff1a; 结尾&#xff…

顶级白帽黑客必备的十大黑客技术

1.熟悉Linux系统和命令行操作&#xff1a; Linux是黑客的基石&#xff0c;几乎所有黑客工具和技术都是在Linux平台上运行的&#xff0c;熟悉Linux系统和命令行操作是必须的。 2.掌握网络协议和TCP/IP模型&#xff1a; 了解TCP/IP模型、网络协议和通信流程是黑客攻击的基础&a…

Python-exe调用-控制台命令行执行-PyCharm刷新文件夹

文章目录 1.控制台命令行执行1.1.os.system()1.2.subprocess.getstatusoutput()1.3.os.popen() 2.PyCharm刷新文件夹3.作者答疑 1.控制台命令行执行 主要三种方式实现。 1.1.os.system() 它会保存可执行程序中的打印值和主函数的返回值&#xff0c;且会将执行过程中要打印的…

Diesel 基础

Diesel 2.0.4 官网 github API Documentation 一个安全的&#xff0c;可扩展的ORM和Rust查询构建器 Diesel去掉了数据库交互的样板&#xff0c;在不牺牲性能的情况下消除了运行时错误。它充分利用了Rust的类型系统来创建一个“感觉像Rust”的低开销查询构建器。 支持数据库…

操作系统基础知识介绍之可靠性与可用性(包含MTTF、MRBF、MTTR等)

计算机是在不同的抽象层上设计和构建的。 我们可以通过计算机递归地下降&#xff0c;看到组件将自身放大为完整的子系统&#xff0c;直到我们遇到单个晶体管。 尽管有些故障很普遍&#xff0c;例如断电&#xff0c;但许多故障仅限于模块中的单个组件。 因此&#xff0c;一个模块…

Python每日一练:小艺的口红(暴力、二分、图论三种方法)代写匿名信

文章目录 前言0、题目一、暴力查找二、二分查找三、有序二叉树总结&#xff08;代写匿名信&#xff09; 前言 很明显小艺的口红问题是考的是查找算法&#xff0c;对于这种一次性查找&#xff0c;直接暴力就行了&#xff0c;当然咱是为了学习&#xff0c;所以用来练练各种查找&…

【Linux】基础IO_文件系统

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅 相关文章推荐&#xff1a; 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写&#xff08;含二进制&#xff09;操作&#xff1f; 【Linux】基础…

【9种】ElasticSearch分词器详解,一文get!!!| 博学谷狂野架构师

ElasticSearch 分词器 作者: 博学谷狂野架构师GitHub&#xff1a;GitHub地址 &#xff08;有我精心准备的130本电子书PDF&#xff09; 只分享干货、不吹水&#xff0c;让我们一起加油&#xff01;&#x1f604; 概述 分词器的主要作用将用户输入的一段文本&#xff0c;按照一定…

二十一、线索转换1:点击转换按钮加载信息、搜索市场活动

功能需求 *在线索转换页面,展示:fullName,appellation,company,owner 流程图 代码实现 1.ClueMapper /*** 通过id查询线索详情* param id 线索id* return 对应id的线索*/Clue selectClueForDetailById(String id); ClueMapper.xml <select id"selectClueForDetailByI…

考研数学武忠祥 高等数学0基础课笔记

函数和映射 常见的函数 取整函数的基本性质 函数的有界性 例题 sinx 是从-1到1的&#xff0c;但是x是无界的 遇到这种带sin的&#xff0c;就要试着取特殊值&#xff0c;让它为1或者为0 函数的单调性 函数的奇偶性 函数的周期性 举例 数学中Q表示有理数集&#xff0c;下面…

Docker服务编排(Docker Compose) :部署上线nginx+springboot项目

Docker服务编排(Docker Compose) 微服务应用一般包含若干个微服务每个微服务一般会部署多个实例&#xff0c;如果每个微服务需要手动启停 维护工作量大 从Dockerfile build image 或者去dockerhub拉去image 创建多个容器 管理容器 Docker Compose 一个编排多容器分布式…

设计原则之【接口隔离原则】

文章目录 一、什么是接口隔离原则二、实例三、总结接口隔离原则与单一职责原则的区别 一、什么是接口隔离原则 接口隔离原则&#xff08;Interface Segregation Principle, ISP&#xff09;是指用多个专门的接口&#xff0c;而不使用单一的总接口&#xff0c;客户端不应该依赖…

自学Java多久可以就业?Java这样自学实习都能过万!

昨天有00后学妹私信小源&#xff0c;她在学校已经学过java、C等相关课程&#xff0c;未来想走计算机的方向&#xff0c;问我建议还要学习什么语言&#xff0c;是否需要继续学Java?今天好程序员简单介绍下Java必学的技术&#xff01;想自学Java的真的可以试一试&#xff01; 一…