试题详情

试题内容

阅读下列说明和C代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。
【说明】
假币问题:有n枚硬币,其中有一枚是假币,己知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。
【分析问题】
将n枚硬币分成相等的两部分:
(1)当n为偶数时,将前后两部分,即 1...n/2和n/2+1...0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币:
(2)当n为奇数时,将前后两部分,即1..(n -1)/2和(n+1)/2+1...0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;若两端重量相等,则中间的硬币,即第 (n+1)/2枚硬币是假币。
【C代码】
下面是算法的C语言实现,其中:
coins[]: 硬币数组
first,last:当前考虑的硬币数组中的第一个和最后一个下标

#include

int getCounterfeitCoin(int coins[], int first,int last)
{
int firstSum = 0,lastSum = 0;
int ì;
If(first==last-1){       /*只剩两枚硬币*/
if(coins[first]< coins[last])
return first;
return last;
}

if((last - first + 1) % 2 ==0){      /*偶数枚硬币*/
for(i = first;i<( 1 );i++){
firstSum+= coins[i];
}
for(i=first + (last-first) / 2 + 1;i< last +1;i++){
lastSum += coins[i];
}
if(   2   ){
Return getCounterfeitCoin(coins,first,first+(last-first)/2;)
}else{
Return getCounterfeitCoin(coins,first+(last-first)/2+1,last;)
}
}
else{      /*奇数枚硬币*/
For(i=first;i<="" p="">
firstSum+=coins[i];
}
For(i=first+(last-first)/2+1;i
lastSum+=coins[i];
}
If(firstSum
return getCounterfeitCoin(coins,first,first+(last-first)/2-1);
}else if(firstSum>lastSum){
return getCounterfeitCoin(coins,first+(last-first)/2-1,last);
}else{
Return(  3   )
}
}
}
【问题一】
根据题干说明,填充C代码中的空(1)-(3)
【问题二】
根据题干说明和C代码,算法采用了(   )设计策略。
函数getCounterfeitCoin的时间复杂度为(   )(用O表示)。
【问题三】
若输入的硬币数为30,则最少的比较次数为(  ),最多的比较次数为(   )。
查看答案

软题库参考答案:暂时没有答案(仅供参考)

软题库解析:正在加载....

你可能感兴趣的试题

6题:阅读下列说明和Java代码,将应填入 (n)  处的字句写在答题纸的对应栏内。
【说明】
某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满300返100)等等。现采用策略(Strategy)模式实现该要求,得到如图6-1所示的类图。

图6-1 策略模式类图
【Java代码】
import java.util.*;
enum TYPE { NORMAL, CASH_DISCOUNT, CASH_RETURN};
interface CashSuper {
public   (1)  ;
}
class CashNormal implements CashSuper{    // 正常收费子类<
1题:【说明】
某房产中介连锁企业欲开发一个基于Web的房屋中介信息系统,以有效管理房源和客户,提高成交率。该系统的主要功能是:
1.房源采集与管理。系统自动采集外部网站的潜在房源信息,保存为潜在房源。由经纪人联系确认的潜在房源变为房源,并添加出售/出租房源的客户。由经纪人或客户登记的出售/出租房源,系统将其保存为房源。房源信息包括基本情况、配套设施、交易类型、委托方式、业主等。经纪人可以对房源进行更新等管理操作。
2.客户管理。求租/求购客户进行注册、更新,推送客户需求给经纪人,或由经纪人对求租/求购客户进行登记、更新。客户信息包括身份证号、姓名、手机号、需求情况、委托方式等。
3.房源推荐。根据客户的需求情况(求购/求租需求情况以及出售/出租房源信息),向已登录的客户推荐房源。
4.交易管理。经纪人对租售客户双方进行交易信息管理,包括订单提交和取消,设 置收取中介费比例。财务人员收取中介费之后,表示该订单已完成,系统更新订单状态和 房源状态,向客户和经纪人发送交易反馈。
5.信息查询。客户根据自身查询需求查询房屋供需信息。
4题:

试题四
阅读以下说明和图,填补流程图中的空缺。
【说明】
某汽车制造工厂有两条装配线。汽车装配过程如图10-6所示,即汽车底盘进入装配线,零件在多个工位装配,结束时汽车自动完成下线工作。

(1)e0和e1表示底盘分别进入装配线0和装配线1所需要的时间。
(2)每条装配线有n个工位,第一条装配线的工位为S0,0,S0,1,…,S0,n-0,第二条装配线的工位为S1,0,S1,1,…,S1,n-1。其中S0,k和S1,k(0≤k≤n-1)完成相同的任务,但所需时间可能不同。
(3)aij表示在工位Sij处的装配时间,其中i表示装配线(i=0或i=1),j表示工位号(0≤j≤n-1)。
(4)tij表示从Sij处装配完成后转移到另一条装配线下一个工位的时间。
(5)X0和X1表示装配结束后,汽车分别从装配线0和装配线
6题:

试题六
14、现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。
现采用原型模式(Prototype)来实现上述要求,得到如图所示的类图。

[Java代码]
Class WorkExperience ______ Cloneable{          //工作简历
Private String workDate;
Private String company;
Public Object Clone(){
______;
obj.workDate=this.workDate;
Obj.company-this.company;
4题:

试题四
阅读下列说明和C代码,将应填入  (n)  处的字句。
[说明]
设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。供应商j供应的部件i具有重量wij和价格cij。设计一个算法,求解总价格不超过上限cc的最小重量的机器组成。
采用回溯法来求解该问题:
首先定义解空间。解空间由长度为n的向量组成,其中每个分量取值来自集合{1,2,…,m),将解空间用树形结构表示。
接着从根结点开始,以深度优先的方式搜索整个解空间。从根结点开始,根结点成为活结点,同时也成为当前的扩展结点。向纵深方向考虑第一个部件从第一个供应商处购买,得到一个新结点。判断当前的机器价格(c11)是否超过上限(cc),重量(w11)是否比当前已知的解(最小重量)大,若是,应回溯至最近的一个活结点;若否,则该新结点成为活结点,同时也成为当前的扩展结点,根结点不再是扩展结点。继续向纵深方向考虑第二个部件从第一个供应商处购买,得到一个新结点。同样判断当前的机器价格(c11+c21)是否超过上限(cc),重量(w11+w
3题:

试题三
阅读下列说明和图,回答问题1至问题3,将解答填入的对应栏内。
[说明]
某银行计划开发一个自动存提款机模拟系统(ATM System)。系统通过读卡器 (Card Reader)读取ATM卡;系统与客户(Customer)的交互由客户控制台(Customer-Console)实现;银行操作员(Operator)可控制系统的启动(System Startup)和停止(System Shutdown);系统通过网络和银行系统(Bank)实现通信。
当读卡器判断用户已将ATM卡插入后,创建会话(Session)。会话开始后,读卡器进行读卡,并要求客户输入个人验证码(PIN)。系统将卡号和个人验证码信息送到银行系统进行验证。验证通过后,客户可从菜单选择如下事务(Transaction):
1.从ATM卡账户取款(Withdraw);
2.向ATM卡账尸存款(Deposit);
3.进行转账(Transfer):
4.查询(Inquire)ATM卡账户信息。
一次会话可以包含多个事务,每个事