试卷征集
加入会员
操作视频

某旅行团需在酒店预订一批房间,要求所预订的房间号码尽量集中,如果有多种方案,优先选择预订房间数目较少的方案,有多组可选方案时选择起始房间号最小的方案。酒店有单人间和双人间两种房间,b数组按房间号顺序存储该房间可入住人数,其中可入住人数为0时,表示该房间已有人入住,不可预订。比如有16个房间可入住人数如下:
房号 i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
人数 b(i) 2 0 2 2 0 1 2 1 2 1 0 2 1 0 2 2
下表给出了选择预订房间的过程(区间长度表示预订房间的起始房号到最后一个房号包含的房间数,区间长度值越小,代表预订房间分布越集中),选择最优方案过程如(1)(2)(3)所示。
(1)从房间号码分布区间长度值最小原则,选择方案2、4、9。
(2)分布区间长度值相同时,选择预订房间数目最小的,因此选择方案2、9。
(3)所有可选方案中,优先选择最先成立的(起始房号最小的)方案,最终选择方案2。
方案 房号范围 区间长度 房间数目 备注 方案 房号范围 区间长度 房间数目 备注
方案1 1~6 6 4 方案6 8~13 6 5
方案2 3~7 5 4 方案7 9~15 7 4 人数>7,取消10号房
方案3 4~9 6 4 人数>7 取消6号单人间 方案8 10~16 7 4 人数>7,取消13号房
方案4 6~10 5 5 方案9 12~16 5 4
方案5 7~12 7 4 人数>7,取消8号单人间
程序运行界面如下,请完成相应的小题。
(1)如下图所示16个房间,当入住人数为5人时,预订房间号是:
7,8,9
7,8,9


(2)请在横线处填写适当的代码。
Const n=16'假设酒店总房间数为16
Dim b(1 To n) As Integer'b 数组按房间号顺序存储各房间可入住人数
Function find1(x,y) As Integer
'函数 find1(x,y)的作用是从 b(x)到 b(y)中找到值为1的数组变量的下标,若找不到,返回值为0
End Function
Private Sub Command1_Click ____
Dim s As Integer,d As Integer,f as integer,num As Integer,roomnum As Integer
Dim minnum as integer'minnum 变量存储当前最优方案中的预订房间数目
Dim mindist As Integer'mindist 存储当前的最小分布区间长度
'所有房间的可入住人数按房间号码顺序存储到数组b中并显示在list1中,代码略
num=Val(Text1.Text)
minnum=n:mindist=n:s=0:start=0:f=0:pos=0
For i=1 To n
If b(i)<>0 Then
j=i:s=0:roomnum=0
Do While s<num And j<=n
s=s+b(j)
If b(j)>0 Then roomnum=roomnum+1
j=j+1
Loop
d=
j-i
j-i

If s=num Then
If d<mindist Or 
d=mindist and roomnum<minnum
d=mindist and roomnum<minnum
 Then
start=i:mindist=d:minnum=roomnum:pos=0
End If
ElseIf s>num Then'若可入住人数超出,在当前区间内所选房间中取消1个单人间
f=find1(i+1,j-2)
If f>0 Then
If d<mindist Or d=mindist And roomnum-1<minnum Then
start=i:mindist=d:minnum=roomnum-1:pos=f
End If
End If
End If
End If
Next i
If start=0 Then
Label2.Caption=“房间数量不足“
Else
List2.AddItem“预订房间:“+Str(minnum)+“间“
For i=start To
start+mindist-1
start+mindist-1

If b(i)>0 And i<>pos Then
List2.AddItem“房间号:“+Str(i)+“,入住人数:“+Str(b(i))
End If
Next i
End If
End Sub

【考点】顺序存储结构
【答案】7,8,9;j-i;d=mindist and roomnum<minnum;start+mindist-1
【解答】
【点评】
声明:本试题解析著作权属菁优网所有,未经书面同意,不得复制发布。
发布:2024/6/27 10:35:59组卷:3引用:1难度:0.3
相似题
  • 1.在一个文档中,每行包含一个字符串。现使用如下规则对其压缩:压缩时,对于每个字符串求其与前一字符串的公共前缀,然后使用公共前缀的长度和字符串的剩余部分(以空格隔开)表示该字符串,每个空格和字符都会占用一个字节空间。图a所示为该压缩规则示意图。小明为此编写了VB程序,功能如下:运行程序时,在列表框List1中显示原字符串内容,单击“压缩”按钮Command1,在列表框List2中显示压缩后字符串,并在标签Label2中显示压缩后容量。程序运行界面如图b所示。

    实现上述功能的 VB 代码如下,但横线处代码有错,请改正。
    Dim word(3000)As String,pre(3000)As String
    Const n=2000
    Private Sub Form_Load (  )
    '该过程的作用是从数据库读取 n 个单词,按字典顺序存储在数组 word 中,并在 Label1输出单词数量和容量
    '代码略
    End Sub
    Private Sub Command1_Click (  )
    Dim conp As Integer'存储压缩后的容量
    Dim f As Boolean,m As Integer,k As Integer'k 存储公共前缀的长度
    conp=0
    For i=1To n
    k=0
    If i=1Then f=False Else f=True
     '(1)
    Do While k<m And f=True
    If Mid(word(i),1,k+1)=Mid(word(i-1),1,k+1)Then
     ′(2)
    Else
    f=False
    End If
    Loop
    pre(i)=CStr(k)+““+Mid(word(i),k+1,Len(word(i)))
    'Cstr (  )函数能够将数字类型的值转换为字符类型的值,并却掉前导空格。
    List2.AddItem pre(i)
    '(3)
    Next i
    Label2.Caption=“压缩后容量为“+Str(conp)+“字节“
    End Sub

    发布:2024/6/27 10:35:59组卷:1引用:1难度:0.9
  • 2.杨辉三角是二项式系数在三角形中的一种几何排列,如1图所示。从图可看出其显著特征是除斜边上的1外,其余数值均等于其肩部两数之和。

    小明设计逐行打印杨辉三角的算法描述如下:
    (1)确定折半边界值。当此行数据个数为奇数时,边界为与首末“等距离”的那个数:当此行数据个数为偶数时,边界为与首末“等距离”的那两个数中左侧数;
    (2)计算杨辉值。数组顺序存储单行杨辉值,只计算边界以左的杨辉值,自边界处向左依次计算至第2列(1列直接置1)。
    (3)输出杨辉值。正向输出数组中存储的杨辉值,再反向输出数组中所存值
    (4)转到步骤1,继续以上步骤处理。
    打印5行杨辉三角示意图如2图所示。

    程序运行效果如3图所示,请回答下列问题:

    (1)当文本框Text1中输入行数为8时,执行该程序后,a(2)的值为
     

    (2)请在横线处填入合适的代码。

    发布:2024/4/20 14:35:0组卷:1引用:1难度:0.6
  • 3.在一个数组中存储了若干个学生的技术成绩小题分,其中a(1)存储学生个数,从a(2)开始按顺序存储小题分数据。每个学生有33个小题的数据,例:a(2)-a(13)是“学生1”的信息客观题得分,a(27)-a(30)是“学生1”的信息主观题得分;a(14)-a(26)是“学生1”的通用客观题得分,a(31)-a(34)是“学生1”的通用主观题得分。
    具体如表:
    题号 1-12 13-25 26-29 30-33
    科目题型 信息客观题 通用客观题 信息主观题 通用主观题
    满分分值 每题2 分 每题2分 4/8/7/7 6/9/3/6
    小李根据上述描述,设计了一个统计所有学生信息各题得分率的算法。程序运行后,首先在列表框List1中显示信息技术各小题得分,单击“计算”按钮“Command1”,在列表框List2中显示信息各题的题号和得分率,并在文本框Text1中输出所有学生的信息平均分(平均分=各题得分率*分值之和)。

    算法的VB程序如下,回答下列问题。
    (1)根据题目描述,使用如图所示数据,a(95)的数值是
     

    (2)在程序横线处填上合适代码,使程序完整
    Dim a(1 To 1000)As Integer,n As Integer
    Private Sub Form_Load (  )
    ‘读入数据到数组a,数据个数n,代码略
    End Sub
    Private Sub Command1_Click (  )
    Dim i As Integer,j As Integer
    Dim fz(1 To 16)As Integer'fz数组存储信息各题满分值
    Dim b(1 To 33)As Single'数组b存储全卷各题的平均得分
    For i=1 To 16'数组fz存储信息16个小题的满分值
    If i<=12 Then fz(i)=2
    fz(13)=4:fz(14)=8:fz(15)=7:fz(16)=7
    Next i
    For i=2 To n'把数组a数据分别统计到各题中,计算各题总得分

    b(j)=a(i)+b(j)
    Next i
    For i=1 To 33
    If i<=12 Then
    b(i)=b(i)/(a(1)*fz(i))’计算信息客观题各题的得分率
    ElseIf i>=26 And i<=29 Then
    b(i)=
    End If
    Next i
    For i=1 To 16
    If i>12 Then j=i+13 Else j=i
    b(j)=Int(b(j)*1000+0.5)/10'对结果四舍五入保留1位小数
    List2.AddItem Str(i)+Str(b(j))+“%“
    ave=
    Next i
    Text1.Text=Str(ave/100)
    End Sub

    发布:2024/4/20 14:35:0组卷:1引用:1难度:0.5
深圳市菁优智慧教育股份有限公司
粤ICP备10006842号公网安备44030502001846号
©2010-2025 jyeoo.com 版权所有
APP开发者:深圳市菁优智慧教育股份有限公司| 应用名称:菁优网 | 应用版本:5.0.7 |隐私协议|第三方SDK|用户服务条款
广播电视节目制作经营许可证|出版物经营许可证|网站地图
本网部分资源来源于会员上传,除本网组织的资源外,版权归原作者所有,如有侵犯版权,请立刻和本网联系并提供证据,本网将在三个工作日内改正