问答题
阅读以下某客房管理系统的算法说明和程序流程图,根据要求回答问题1至问题4。
【算法说明】
某商务交流中心共有N间客房。每间客房的房间号、房间等级、床位数及占用状态分别存放在数组ROOM、RANK、NBED和STATUS中。房间等级值为1、2或3。房间的状态值为0(空闲)或1(占用)。客房是以房间(不是床位)为单位出租的。
程序流程图(见图2-11)所反映的算法是,根据几个散客的要求预订一间空房。程序的输入为:人数M,房间等级要求尺(R=0表示任意等级都可以)。程序的输出为:所有可供选择的房间号。
问答题
【问题】
在图2-11所示的程序流程图中,若要某个房间I被选中,则需要满足什么条件?
【正确答案】
【答案解析】1)房间未被占用,即STATUS(I)==0 2)房间的床铺要足够,即NBED(I)>=M 3)若客人要求特定的房间等级R(R!=0),则RANK(I)=R,否则RANK(I)的值不做考虑 [要点解析] 在程序流程图(见图2-11)中,I表示房间序号(需注意不是房间的编号)。当I>N时表示所有的房间都检查过了,若STATUS(I)≠0,表示房间已被占用,则检查下一个房间;否则查看房间的床铺是否足够。着NBED(I)<M表示房间床铺不够,则检查下一个房间:若床铺足够,则需看客人对房间等级是否有要求。若R!=0,表示客人对房间等级有要求,则检查RANK(I)是否等于尺。若不等于,则检查下一个房间;若RANK(I)==R或者R==0,分别表示房间等级满足要求和客人对房间等级无要求,则当前的房间I满足所有的条件。接着可将房间I的房间编号ROOM(1)存放到RM(J)中,然后检查下一个房间。 综合以上分析结果,某个房间I要满足下列条件才可被选中: 1)房间未被占用,即STATUS(I)==0: 2)房间的床铺要足够,即NBED(I)>=M; 3)若客人要求特定的房间等级R(R!=0),则RANK(I)==2R,否则RANK(I)的值不做考虑。
问答题
【问题2】
假设该商务交流中心当前各个房间的情况如表2-14所示。
{{B}}表2-14 某商务交流中心房间情况表{{/B}}
{{B}}序号1{{/B}}
{{B}}ROOM{{/B}}
{{B}}RANK{{/B}}
{{B}}NBED{{/B}}
{{B}}STATUS{{/B}}
1
1101
2
6
0
2
1102
3
6
1
3
1201
1
2
0
4
1202
3
3
0
5
1301
1
2
1
6
1302
2
3
0
当输入M=3,R=0时,该算法的输出是{{U}} (1) {{/U}}。
当输入M=2,R=1时,该算法的输出是{{U}} (2) {{/U}}。
【正确答案】
【答案解析】(1)1101 1202 1302 (2)1201 [要点解析] 当输入M=3,R=0时,表示客人的人数为3,对房间的等级没有要求,因此,只要房间的床铺足够且房间未被占用即可满足要求。换言之,在表2-14中NBED列中的值大于等于3,STATUS列中的值为0即可满足条件,因此输出的结果为:1101 1202 1302。 当输入M=2,R=1时,表示客人的人数为2,要求房间的等级为1级,因此,在房间的床铺足够且房间未被占用时,还要求房间的等级为1级才可满足要求。换言之,表2-14中RANK列中的值等于1,NBED列中的值大于等于2,STATUS列中的值为0即可满足条件,因此,输出的结果为:1201。
问答题
【问题3】
如果等级为r的房间每人每天的住宿费为RATE(r),其中RATE为数组,则为使该算法在输出每个候选的房间号RM(J)后,再输出这批散客每天所需的总住宿费DAYRENT(J),在程序流程图(见图2-11)中“ROOM(1)→RM(J)”(b所指向的方框中)之后应增加的处理语句是{{U}} (3) {{/U}}。
【正确答案】
【答案解析】(3)RATE(RANK(I))*M->DAYRENT(J) [要点解析] 结合常识可知,由于房间的费用是根据房间的等级和房间所住客人的数量决定的,因此在等级为了的房间每人每天的住宿费为RATE(r)的前提下,为使该算法在输出每个候选的房间号RM(J)后,再输出这批散客每天所需的总住宿费DAYRENT(J),在图2-11中“ROOM(1)→RM(J)”之后应增加的处理语句如下。 RATE(RANK(I))*M→DAYRENT(J)
问答题
【问题4】
如果限制该算法最多输出K个可供选择的房间号,则在程序流程图(见图2-11)中“>N”(a所指向的判断框中)应修改为{{U}} (4) {{/U}}。
【正确答案】
【答案解析】(4)I,N||J=K,或其他等价形式 [要点解析] 如果要限制该算法最多输出K个可供选择的房间号,则必须知道已经选择的房间的个数。由于变量J的值代表了满足条件的房间数量,因此在图2-11中判断语句“I>N”应修改为:I>N||J=K。