学进去-教育应平等而普惠
试题
类型:操作题
难度系数:0.40
所属科目:高中信息技术
某旅行团需在酒店预订一批房间,要求所预订的房间号码尽量集中,如果有多种方案,优先选择预订房间数目较少的方案,有多组可选方案时选择起始房间号最小的方案。酒店有单人间和双人间两种房间,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人时,预订房间号是:_____________

(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 = ___

If s = num Then

If d < mindist Or _____ 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_____

If b(i) > 0 And i <> pos Then

List2.AddItem "房间号:" + Str(i) + ",入住人数:" + Str(b(i))

End If

Next i

End If

End Sub
编辑解析赚收入
收藏
|
有奖纠错

同类型试题

优质答疑

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

用户名称
2019-09-19

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

用户名称
2019-09-19
我要答疑
编写解析
解析:

奖学金将在审核通过后自动发放到帐

提交
我要答疑
我要答疑:
提交