首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列程序说明和C++代码,将应填入(n)处。 【说明】 “背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1;w2,……,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品
阅读下列程序说明和C++代码,将应填入(n)处。 【说明】 “背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1;w2,……,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品
admin
2009-02-15
62
问题
阅读下列程序说明和C++代码,将应填入(n)处。
【说明】
“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1;w2,……,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。
如下程序均能求得“背包问题”的一组解,其中程序4.1是“背包问题”的递归解法,而程序4.2是“背包问题”的非递归解法。
【程序4.1】
#include<stdio.h>
#define N 7
#define S 15
int w[N+1]={0,1,4,3,4,5,2,7};
int knap(int s,int n)
{ if(s==0)return 1;
if(s<0||(s>0& &n<1))return 0;
if((1)))|
printf("%4d",w[n]);return 1;
} return (2);
}
main(){
if(knap(S,N))printf("OK!\n");
else printf("NO!\n");
}
【程序4.2】
#include<stdio.h>
#define N 7
#define S 15
typedef struct{
int s;
int n:
int job;
} KNAPTP;
int w[N+1]={0,1,4,3,4,5,2,7};
int knap(int s,int n);
main(){
if(knap(S,N))printf("OK!\n");
else printf("NO!\n");}
int knap(int s,int n)
{ KNAPTP stack[100],x;
int top,k,rep;
x.s=s;x.n=n;
x.job=0;
top=|;Stack[top]=x;
k=0;
while((3)){
x=Stack[top];
rep=1;
while(!k && rep){
if(x.s==0)k=1;/*已求得一组解*/
else if(x.s<0||x.n <=0)rep=0;
else{x.s=(4);x.job=1;
(5)=x;
}
}
if(!k){
rep=1;
while(top>=1&&rep){
x=stack[top--];
if(x.job==1){
x.s+=W[x.n+1];
x.job=2;
Stack[++top]=x;
(6);
}
}
}
}
if(k){/*输出一组解*/
while(top>=1){
x=staCk[top--];
if(x.job==1)
printf("%d\t",w[x.n+1]);
}
}
return k;
}
选项
答案
(1)knap(s-w[n],n-1)(2)knap(s,n-1)(3)top>=1 && ! k 或 top>0 && k==0(4)x.s-w[x.n--](5)stack[++top](6)rep=0
解析
试题提供了两种解决问题的方法,程序5.1是用递归的方法来解决背包问题,程序5.2使用非递归的方法来解决背包问题。每次选择一个物品放入背包,那么剩余的物品和背包剩余的重量,又构成一个“背包问题”。程序从数组下标最大的物品开始考查,因此(1)处应该填“knap(s-w[n],n-1)”,即将数组中第N个物品放入背包,如果它能够放入到背包中,则该物品是构成解的元素之一;否则,将该物品从背包中取出,该物品不构成解的元素,在以后的考查中,它可以被排除,因此(2)处应该填“knap(s,n-1)”。在改程序中用栈来保存已经考查过的物品,结构KNAPTP表示经过考查的物品,s表示考查过该物品后背包所能够盛放的物品的重量;n表示该物品在数组W中的下标;job表示物品当前的状态:当job等于1,表示物品n可以放入背包; job等于2表示物品n不能被放入到背包,那么在以后的选取中将不再考虑该物品。初始时job等于0,表示背包中没有任何放入任何物品。 K为有解的标志。Rep为一个标志变量,rep等于0,表示结束当前的动作;rep等于1表示继续进行当前的动作。当栈顶物品不能放入背包时,将rep设置为0,表示下一步不从数组w中取物品。其初值为1。开始时,将数组中下标最大的物品放入栈中,然后开始考查该物品。该物品满足放入背包的条件,第(4)(5)空将完成将物品放入背包的操作,因此(4)空填“x.s-w[x.n--]”,修改背包的可容纳物品的重量; (5)处填"stack[++top]",将下一个要考查的物品放入栈中。若该物品不满足放入背包的条件,则将该物品从背包中取出,因此将rep置为 0,结束循环while(! k&&rep)。将物品从背包中取出,即释放该物品在背包中所占的重量,并标记为不能放入到背包(job=2),再将其放入到栈中;然后继续考查数组w中的下一个物品,因此需要结束循环while (top>=1 &&rep),将rep置为0,所以第(6)处应该填“rep=0”。在第三处要求给出循环结束的条件,即可以继续选取物品的条件,在此处填“top>=1&&!k”。
转载请注明原文地址:https://kaotiyun.com/show/EwDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
对于提升磁盘I/O性能问题,以下表述正确的是(58)。
以下不属于软件测试对象的有______项。①需求规格说明书②软件的程序模块③概要设计说明书与详细设计说明书④软件的用户手册A.2B.3C.4D.0
白盒测试也称结构测试或逻辑驱动测试,典型的白盒测试方法包括静态测试和动态测试。其中,静态测试除了静态结构分析法、静态质量度量法外,还有______。A.代码检查法B.逻辑覆盖法C.基本路径测试法D.结构覆盖法
V模型描述了软件基本的开发过程和测试行为,描述了不同测试阶段与开发过程各阶段的对应关系。其中,集成测试阶段对应的开发阶段是______。A.需求分析阶段B.概要设计阶段C.详细设计阶段D.编码阶段
模块设计中,某模块根据输入的控制信息从文件中读一个记录或者向文件中写一个记录,则其内聚类型为______。
软件评价过程的特性不包括()。
已知函数f()、g()的定义如下所示,调用函数f时传递给形参x的值是5。若g(a)采用引用调用(callbyreference)方式传递参数,则函数f的返回值为(12);若g(a)采用值调用(callbyvalue)的方式传递参数,则函数f
网络测试不能解决的问题是______。A.连通性B.丢包C.全表扫描D.延迟
设有学生实体Students(学号,姓名,性别,年龄,家庭住址,家庭成员,关系,联系电话),其中“家庭住址”记录了邮编、省、市、街道信息;“家庭成员,关系,联系电话”分别记录了学生亲属的姓名、与学生的关系以及联系电话。学生实体Students中的“
随机试题
邓小平理论是
在碱性条件下,生长良好的细菌是
医疗机构的医务人员违反献血法规定,将不符合国家规定标准的血液用于患者的,可能承担以下法律责任,除了
成年妇女骨盆倾斜度的正常值应是
某工程公司中标承包一城市道路施工项目,道路总长15km,其中包括一段燃气管线的敷设。工程建设工期很紧。为抓紧时间,该公司很快组成项目经理部,项目部进行了临建。项目部拿到设计院提供的设计施工图决定立即开始施工,监理工程师尚未到场。开工后项目部组织人员编制了施
课堂上如何唤醒学牛学习的兴趣,集中其注意力?
听说,杭州西湖上的雷峰塔倒掉了,听说而已,我没有亲见。但我却见过未倒的雷峰塔,破破烂烂的映掩于湖光山色之间,落山的太阳照在这些四近的地方,就是“雷峰夕照”,西湖十景之一。“雷峰夕照”的真景我也见过,并不见佳,我以为。然而一切西湖胜迹的名目之中
哈罗德的分析之所以是一种动态的分析,是因为他()。
IwishI(have)(someone)to(talkover)thisproblem(with).
A、$999million.B、$931million.C、$901million.D、$921million.D数字理解。
最新回复
(
0
)