某旅行團需在酒店預(yù)訂一批房間,要求所預(yù)訂的房間號碼盡量集中,如果有多種方案,優(yōu)先選擇預(yù)訂房間數(shù)目較少的方案,有多組可選方案時選擇起始房間號最小的方案。酒店有單人間和雙人間兩種房間,b數(shù)組按房間號順序存儲該房間可入住人數(shù),其中可入住人數(shù)為0時,表示該房間已有人入住,不可預(yù)訂。比如有16個房間可入住人數(shù)如下:
房號 | i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
人數(shù) | b(i) | 2 | 0 | 2 | 2 | 0 | 1 | 2 | 1 | 2 | 1 | 0 | 2 | 1 | 0 | 2 | 2 |
(1)從房間號碼分布區(qū)間長度值最小原則,選擇方案2、4、9。
(2)分布區(qū)間長度值相同時,選擇預(yù)訂房間數(shù)目最小的,因此選擇方案2、9。
(3)所有可選方案中,優(yōu)先選擇最先成立的(起始房號最小的)方案,最終選擇方案2。
方案 | 房號范圍 | 區(qū)間長度 | 房間數(shù)目 | 備注 | 方案 | 房號范圍 | 區(qū)間長度 | 房間數(shù)目 | 備注 |
方案1 | 1~6 | 6 | 4 | 方案6 | 8~13 | 6 | 5 | ||
方案2 | 3~7 | 5 | 4 | 方案7 | 9~15 | 7 | 4 | 人數(shù)>7,取消10號房 | |
方案3 | 4~9 | 6 | 4 | 人數(shù)>7 取消6號單人間 | 方案8 | 10~16 | 7 | 4 | 人數(shù)>7,取消13號房 |
方案4 | 6~10 | 5 | 5 | 方案9 | 12~16 | 5 | 4 | ||
方案5 | 7~12 | 7 | 4 | 人數(shù)>7,取消8號單人間 |
(1)如下圖所示16個房間,當(dāng)入住人數(shù)為5人時,預(yù)訂房間號是:
7,8,9
7,8,9
。(2)請在橫線處填寫適當(dāng)?shù)拇a。
Const n=16'假設(shè)酒店總房間數(shù)為16
Dim b(1 To n) As Integer'b 數(shù)組按房間號順序存儲各房間可入住人數(shù)
Function find1(x,y) As Integer
'函數(shù) find1(x,y)的作用是從 b(x)到 b(y)中找到值為1的數(shù)組變量的下標,若找不到,返回值為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 變量存儲當(dāng)前最優(yōu)方案中的預(yù)訂房間數(shù)目
Dim mindist As Integer'mindist 存儲當(dāng)前的最小分布區(qū)間長度
'所有房間的可入住人數(shù)按房間號碼順序存儲到數(shù)組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
Thenstart=i:mindist=d:minnum=roomnum:pos=0
End If
ElseIf s>num Then'若可入住人數(shù)超出,在當(dāng)前區(qū)間內(nèi)所選房間中取消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=“房間數(shù)量不足“
Else
List2.AddItem“預(yù)訂房間:“+Str(minnum)+“間“
For i=start To
start+mindist-1
start+mindist-1
If b(i)>0 And i<>pos Then
List2.AddItem“房間號:“+Str(i)+“,入住人數(shù):“+Str(b(i))
End If
Next i
End If
End Sub
【考點】順序存儲結(jié)構(gòu).
【答案】7,8,9;j-i;d=mindist and roomnum<minnum;start+mindist-1
【解答】
【點評】
聲明:本試題解析著作權(quán)屬菁優(yōu)網(wǎng)所有,未經(jīng)書面同意,不得復(fù)制發(fā)布。
發(fā)布:2024/6/27 10:35:59組卷:2引用:1難度:0.3
相似題
-
1.在一個文檔中,每行包含一個字符串。現(xiàn)使用如下規(guī)則對其壓縮:壓縮時,對于每個字符串求其與前一字符串的公共前綴,然后使用公共前綴的長度和字符串的剩余部分(以空格隔開)表示該字符串,每個空格和字符都會占用一個字節(jié)空間。圖a所示為該壓縮規(guī)則示意圖。小明為此編寫了VB程序,功能如下:運行程序時,在列表框List1中顯示原字符串內(nèi)容,單擊“壓縮”按鈕Command1,在列表框List2中顯示壓縮后字符串,并在標簽Label2中顯示壓縮后容量。程序運行界面如圖b所示。
實現(xiàn)上述功能的 VB 代碼如下,但橫線處代碼有錯,請改正。
Dim word(3000)As String,pre(3000)As String
Const n=2000
Private Sub Form_Load ( )
'該過程的作用是從數(shù)據(jù)庫讀取 n 個單詞,按字典順序存儲在數(shù)組 word 中,并在 Label1輸出單詞數(shù)量和容量
'代碼略
End Sub
Private Sub Command1_Click ( ?。?br />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 ( ?。┖瘮?shù)能夠?qū)?shù)字類型的值轉(zhuǎn)換為字符類型的值,并卻掉前導(dǎo)空格。
List2.AddItem pre(i)
'(3)
Next i
Label2.Caption=“壓縮后容量為“+Str(conp)+“字節(jié)“
End Sub發(fā)布:2024/6/27 10:35:59組卷:1引用:1難度:0.9 -
2.楊輝三角是二項式系數(shù)在三角形中的一種幾何排列,如1圖所示。從圖可看出其顯著特征是除斜邊上的1外,其余數(shù)值均等于其肩部兩數(shù)之和。
小明設(shè)計逐行打印楊輝三角的算法描述如下:
(1)確定折半邊界值。當(dāng)此行數(shù)據(jù)個數(shù)為奇數(shù)時,邊界為與首末“等距離”的那個數(shù):當(dāng)此行數(shù)據(jù)個數(shù)為偶數(shù)時,邊界為與首末“等距離”的那兩個數(shù)中左側(cè)數(shù);
(2)計算楊輝值。數(shù)組順序存儲單行楊輝值,只計算邊界以左的楊輝值,自邊界處向左依次計算至第2列(1列直接置1)。
(3)輸出楊輝值。正向輸出數(shù)組中存儲的楊輝值,再反向輸出數(shù)組中所存值
(4)轉(zhuǎn)到步驟1,繼續(xù)以上步驟處理。
打印5行楊輝三角示意圖如2圖所示。
程序運行效果如3圖所示,請回答下列問題:
(1)當(dāng)文本框Text1中輸入行數(shù)為8時,執(zhí)行該程序后,a(2)的值為
(2)請在橫線處填入合適的代碼。發(fā)布:2024/4/20 14:35:0組卷:1引用:1難度:0.6 -
3.在一個數(shù)組中存儲了若干個學(xué)生的技術(shù)成績小題分,其中a(1)存儲學(xué)生個數(shù),從a(2)開始按順序存儲小題分數(shù)據(jù)。每個學(xué)生有33個小題的數(shù)據(jù),例:a(2)-a(13)是“學(xué)生1”的信息客觀題得分,a(27)-a(30)是“學(xué)生1”的信息主觀題得分;a(14)-a(26)是“學(xué)生1”的通用客觀題得分,a(31)-a(34)是“學(xué)生1”的通用主觀題得分。
具體如表:題號 1-12 13-25 26-29 30-33 科目題型 信息客觀題 通用客觀題 信息主觀題 通用主觀題 滿分分值 每題2 分 每題2分 4/8/7/7 6/9/3/6
算法的VB程序如下,回答下列問題。
(1)根據(jù)題目描述,使用如圖所示數(shù)據(jù),a(95)的數(shù)值是
(2)在程序橫線處填上合適代碼,使程序完整
Dim a(1 To 1000)As Integer,n As Integer
Private Sub Form_Load ( )
‘讀入數(shù)據(jù)到數(shù)組a,數(shù)據(jù)個數(shù)n,代碼略
End Sub
Private Sub Command1_Click ( ?。?br />Dim i As Integer,j As Integer
Dim fz(1 To 16)As Integer'fz數(shù)組存儲信息各題滿分值
Dim b(1 To 33)As Single'數(shù)組b存儲全卷各題的平均得分
For i=1 To 16'數(shù)組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'把數(shù)組a數(shù)據(jù)分別統(tǒng)計到各題中,計算各題總得分
①
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'對結(jié)果四舍五入保留1位小數(shù)
List2.AddItem Str(i)+Str(b(j))+“%“
ave=③
Next i
Text1.Text=Str(ave/100)
End Sub發(fā)布:2024/4/20 14:35:0組卷:1引用:1難度:0.5
把好題分享給你的好友吧~~