问答题
读下列算法说明和图4-5,回答问题1至问题3。 【算法说明】 某旅馆共有N间客房。每间客房的房间号、房间等级、床位数及占用状态分别存放在数组 ROOM、RANK、NBED和STATUS中。房间等级值为1、2或3。房间的状态值为0(空闲)或1(占用)。客房是以房间(不是床位)为单位出租的。 本算法根据几个散客的要求预订一间空房。程序的输入为:人数M,房间等级要求R(R=0表示任意等级都可以)。程序的输出为:所有可供选择的房间号。 图4-5描述了该算法。
问答题
假设当前该旅馆各个房间的情况如表4-3所示。
【正确答案】正确答案:101,301。
【答案解析】
问答题
如果等级为R的房间每人每天的住宿费为RATE(R),RATE为数组。为使该算法在输出每个候选的房间号RM(J)后,再输出这批散客每天所需的总住宿费DAYRENT(J),图4-5的β所指框中的最后处应增加什么处理?
【正确答案】正确答案:RATE(RANK(I))* M→DAYRENT(J)或M* RATE(RANK(I))→DAYRENT(J)
【答案解析】
问答题
如果限制该算法最多输出K个可供选择的房间号,则在图4-5的α所指的判断框应改成什么处理?
【正确答案】正确答案:I>N OR J=K,其中,I>N也可以写成I=N+1;J=K也可以写成J≥K。
【答案解析】解析:问题1比较简单,“输入M=4,R=0”表示散客人数为4,房间等级任意。对照旅馆各房间的情况表,易得满足条件的房间号有:101和301,算法的输出正是可供选择的房间号,故算法的输出应该为:“101,301”。 根据题设,每天的住宿费DAYRENT(J)应为散客数M与对应房间(等级为r)的每人每天住宿费RATE(r)的乘积。问题就是r是多少呢?是用户输入的“R”吗?显然可以排除这种情况,因为R可以为0。仔细地分析可得,r应为“RANK(I)”。故应增加“RATE(RANK(I))*M→ DAYRENT(J)”。需要注意的一点是,将变量A赋值V的写法如下:V→A,而不是C语言的习惯:A=V。在流程图中,等号“=”就表示“等于”。 仔细分析可得,变量I是用来计数旅馆房间的,变量J是用来计数满足条件的房间数的。α所指的判断框成立时输出结果,因此应改成:I>N OR J=K。