試卷征集
          加入會員
          操作視頻

          某旅行團需在酒店預訂一批房間,要求所預訂的房間號碼盡量集中,如果有多種方案,優先選擇預訂房間數目較少的方案,有多組可選方案時選擇起始房間號最小的方案。酒店有單人間和雙人間兩種房間,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
          APP開發者:深圳市菁優智慧教育股份有限公司| 應用名稱:菁優網 | 應用版本:5.0.7 |隱私協議|第三方SDK|用戶服務條款
          本網部分資源來源于會員上傳,除本網組織的資源外,版權歸原作者所有,如有侵犯版權,請立刻和本網聯系并提供證據,本網將在三個工作日內改正