学进去-教育应平等而普惠
排序:
414道相关试题
班长为合唱比赛准备礼物,预算总金额有n元钱,预计购买p件礼物,每件礼物对应有商品编号、单价、数量和喜爱度。礼物不可分割,每人至多一份,班长希望每位获得礼物的同学都尽可能喜爱获得的礼物。
按上述要求,编写VB程序,功能如下:在文本框Text1中输入预计礼物数,在文本框 Text2中输入总金额,单击“计算”按钮Command1,在列表框List1中显示各类商品的编号、单价、数量、喜爱度,以及最佳购买方案、剩余金额和总喜爱度,若有多种最佳方案,则输出第一个找到的方案信息,如图a所示。
图a
(1) 请在划线处填入合适的代码。
Const m = 4          '有 m 种商品
Dim sph(1 To m) As String      '商品号
Dim dj(1 To m) As Single      '单价
Dim sl(1 To m) As Integer      '数量
Dim xa(1 To m) As Integer      '喜爱度
Dim hh(1 To m * 10) As Integer      '每件商品对应的货号
Dim p As Integer,n As Integer,nc As Integer      'p 个朋友,n 元钱,共 nc 件商品
Dim zxa As Integer         '总喜爱度为每件购买商品的喜爱度*购买数量的总和
Private Sub Form_Load()
'各商品的商品号、单价、数量、喜爱度分别存入数组 sph、dj、sl 和 xa 并输出,代码略
End Sub
Private Sub Command1_Click()

Dim goumai(1 To m * 10) As Integer

Dim i As Double,j As Integer,k As Integer,t As Integer

Dim fs As Integer,je As Integer,maxi as Integer,maxje As Integer,

maxzxa As Integer

p = Val(Text1.Text): n = Val(Text2.Text)

nc = 0

For i =1 To m

For j =1To sl(i)

nc = nc + 1:_________

Next j

Next i

For i =0 To 2^ nc - 1

t = i

For j =1 To nc

goumai(j) =_________

t = t \ 2

Next j

fs = 0: je = 0: zxa =0'初始化份数,金额,总喜爱度

For j =1To nc

fs = fs + goumai(j): je = je + dj(hh(j)) * goumai(j): zxa = zxa + xa(hh(j)) * goumai(j)

Next j

If fs = p And _________ Then maxi = i: maxje = je: maxzxa = zxa

Next i

'输出 maxi 对应的购买方案,代码略

If maxje >0Then List1.AddItem "剩余金额:" & CStr(n - maxje) & " 总喜爱度:" & CStr(maxzxa) Else List1.AddItem "钱太少"


End Sub
(2)根据题意,现有 4 种商品对应的信息如图b所示,若预算总金额为400元,预计购买10件礼物,则图中购买方案中三种商品的购买数量分别为__________(填数字,中间用逗号分隔)。
图b
类型:操作题
难度系数:困难0.15
收藏
纠错
详情
世界上有很多国家向我国申购新冠疫苗。我国共有n个仓库存储疫苗,第i个仓库有疫苗a(i)(单位:万支,(单位:万支,下同)。现有m(n>=m)个国家向我国提出疫苗购买申请。我国计划将n个仓库中的疫苗全部分配给这m个国家。分配规则如下:①每个仓库中的疫苗只能作为一个整体分配给一个国家;②一个国家可以获得任意多个仓库的疫苗;③要求获得最多疫苗的国家与获得最少疫苗的国家之间疫苗数量差值最小;④若存在多个满足条件的分配方式,则输出最先找到的分配方式。
例如:若n=4,4个仓库中的疫苗数分别为50、13、80、27。若m=2,最小差值为10;若m=3,最小差值为40。
编写VB程序模拟上述功能,在文本框Text1中输入n(n≤15),在文本框Text2中输入m(m≤4),随机生成n个两位正整数,在列表框List1中输出。单击“计算”按钮Command1,在文本框Text3中输出最小差值,在列表框List2中输出每个国家获得疫苗的方案。程序运行界面如图所示。

(1)语句 List1.Clear 中的“Clear”属于__________(单选,填字母:A.对象名/B.属性名/C.方法名)。
(2)实现疫苗分配的 VB 程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
Private Sub Command1_Click()
Const maxn = 15
Dim n As Integer, i As Long, j As Long, k As Long, p As Integer, m As Integer
Dim a(1 To maxn) As Long, f(1 To maxn) As Long
Dim s(1 To maxn) As String, max As Long, min As Long, ans As Long, ansi As Long
n = Val(Text1.Text): m = Val(Text2.Text)
List1.Clear: List2.Clear: Randomize
For i = 1 To n
      __________
      List1.AddItem Str(a(i))
Next i
ans = 10000
For i = 1 To m ^ n ’枚举所有的分配方案
      For j = 1 To m
          f(j) = 0
      Next j
      j = i: max = 0: min = 10000
      For k = 1 To n
         __________
          f(p) = f(p) + a(k)
          j = j \ m
      Next k
      For k = 1 To m
          If f(k) > max Then max = f(k)
          If f(k) < min Then min = f(k)
      Next k
      If __________Then
          ans = max - min
          ______
      End If
Next i
Text3.Text = Str(ans)
For i = 1 To n
      j = ansi Mod m
      s(j + 1) = s(j + 1) + Str(a(i))
      ansi = ansi \ m
Next i
For i = 1 To m
      List2.AddItem s(i)
Next i
End Sub
类型:操作题
难度系数:困难0.15
收藏
纠错
详情
随机生成正整数数组a,并将数组中各元素以金字塔显示,要求对金字塔每层中的数据排序处理, 奇数行升序排列,偶数行降序排列,效果见下图。请为划线处选择合适的代码。( )

Dim a(1 To 15) As Integer, num As Integer, s As String
‘生成数组a,a(1)=73,a(2)=58,a(3)=62,a(4)=36…代码略
Private Sub Command1_Click()’对数组进行排序
num = 5: k = 1: f = 1
For i = 1 To num
      k = k + i
      For m = k - i To      
          For n = k - i To 2 * k - 2 - i - m
              If          Then t = a(n): a(n) = a(n + 1): a(n + 1) = t
          Next n
      Next m
      f = f * (-1)
Next i
’将处理后的数组,以金字塔形显示,代码略
End Sub
A.k-1 f * a(n) < f * a(n + 1)B.k-1 f * a(n) > f * a(n + 1)
C.k-2 f * a(n) > f * a(n + 1)D.k-2 f * a(n) < f * a(n + 1)
类型:选择题
难度系数:困难0.15
收藏
纠错
详情
某信息仅包含大写字母,字符数不超过 n*n(n*n 为密钥矩阵规模,n<10),加密过程如下:

图 a


图 b


根据上述加密算法编写解密程序。程序在启动时读取密钥矩阵存入数组 a 中,在文本框 Text1 中输入密文,点击“解密”按钮,在文本框 Text2 中显示明文。运行界面如下图 c 所示。
(1)在文本框 text1 中输入的密文是“8,1,23,2,17,3,33,4,”,则原文是_______(密钥矩阵按图 a 中的密钥矩阵)
(2)实现上述算法的 VB 程序如下,请在划线处填入合适的代码。

Const n = 3

Dim a(1 To n * n) As Integer

Private Sub Command1_Click()

Dim mw(1 To 2*n*n) As Integer

‘存储密文数据,奇数位存储加密值,偶数位存储该数据在原文中的位置

Dim yw(1 To n*n) As Integer     ‘存储解密数据

Dim k As Integer

‘生成规模为 n*n 的密钥矩阵存入数组 a 中,代码略

For i = 1 To Len(Text1.Text)

c = Mid(Text1.Text, i, 1)

If c <> "," Then

t = t * 10 + Val(c)

Else

__________

mw(k) = Val(t): t = 0

End If

Next i

For i = 1 To k\2   ‘对密文解密,结果存数组 yw

yw(mw(2 * i)) = _______

Next i

s = ""

For i = 1 To k\2

s = s + Chr((yw(i)) + 64)

Next i

Text2.Text = s


End Sub
Function getmm(x As Integer, n As Integer)

col = (x - 1) Mod n + 1

row = (x - 1) \ n + 1

getmm = a((col - 1) * n + row)

If row Mod 2 = 0 Then getmm = _______


End Function
类型:操作题
难度系数:困难0.15
收藏
纠错
详情
小明在玩翻转棋盘的游戏,游戏规则是在一个4*4的棋盘中挑选棋子(棋子只有黑白两面,0表示白,1表示黑),对于每颗被挑选的棋子,要将该棋子和它在棋盘上的上下左右4个相邻位置上的棋子一起翻转,若某个方向上无棋子,则不作处理,最后使得棋盘纯色(纯白或纯黑)。

如上图所示的棋盘,需要选择第2行第2列、第4行第2列两颗棋子,按照规则进行翻转便可使得棋盘变为纯黑。现编写程序找出实现棋盘纯色所需翻转棋子次数最少的方案并输出所挑选棋子的个数,若无答案则输出“无法翻转为纯色”。

解决该问题的算法原理:棋盘翻转方案为0000000000000000~1111111111111111之间的某几种,即十进制数 0~65535,利用枚举算法在0~65535之间枚举,即可找到最优方案。假设被选翻转棋子状态用1表示被选中,0表示不选中。例如某方案的十进制为1028即 2^10+2^2,转化为一个16位的二进制串0000010000000100就表示该棋盘中的第2行第2列、第4行第2列这两个棋子及其上下左右被选中翻转,我们认为该方案选中两个棋子进行翻转。

程序运行界面如下图所示,请回答下列问题。



(1)若某方案用十进制表示为100,则该方案总共选择了________个棋子进行翻转。
(2)实现上述功能的程序代码如下,请将划线处的代码补充完整。
(3)代码加框处有误,请改正。
'数组a储存棋盘原状态,数组b储存翻转后的棋盘状态
Dim a(1 To 16) As Integer, b(1 To 16) As Integer, minc As Long
Private Sub Form_Load()
'生成原始由0、1组成的棋盘状态,用数组 a(1)-a(16)保存,代码略
End Sub
Private Sub Command1_Click()
Dim k As Integer, c As Integer, i As Long, j As Long
minc = 100
For i = 0 To 65535
For j = 1 To 16 '初始化棋盘
      b(j) = a(j)
Next j
k = 16: c = 0: j = i
Do While j > 0
      If j Mod 2=1 Then
        b(k) = 1 - b(k)
        If k > 4 Then b(k - 4) = 1 - b(k - 4)
        If ___ Then b(k + 4) = 1 - b(k + 4)
        If k Mod 4 <> 0 Then b(k + 1) = 1 - b(k + 1)
        If k Mod 4 <> 1 Then b(k - 1) = 1 - b(k - 1)
        c = c + 1
      End If
      ___
      k = k - 1
Loop
If Then minc = c_____
Next i
If minc = 100 Then Label1.Caption = "无法翻转为纯色!" Else Label1.Caption = "最少翻" + Str(minc) + "次"
End Sub
Function check() As Boolean '判断棋盘是否纯色

Dim flag As Boolean, i As Integer


flag = True
For i = 1 To 15
If ___ Then flag = False: Exit For
Next i
check = flag
End Function
类型:操作题
难度系数:困难0.15
收藏
纠错
详情
随机生成n个大于等于1且小于等于n的不重复正整数,采用“数据块交换”方式升序排序。数据块交换方式如下:
在待处理的数据区间中,对相邻且数据个数相等的数据块进行处理。若数字i恰好在第i位置,则不做交换,否则按下列两种情况处理。
情况A.待处理区间中,若数字i之前的数据个数小于等于其余数据个数,做一次交换可将数字i换到第i位置,如数字i=2时:

情况B.待处理区间中,若数字i之前的数据个数大于其余数据个数,操作如下:
◆奇数个数据:先将待处理区间中第1个数据排除,对其余数据整体做数据块交换,再按情况A处理,如数字i=3时:

◆偶数个数据:先将待处理区间整体做数据块交换,再按情况A处理,如数字i=4时:


(1)若数组a中数据为“4,5,1,2,3”,则第1次数据块交换后数组a中数据依次为:________
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Const Maxn=30
Dim a(1 To Maxn)As Integer
Dim wz(1 To Maxn)As Integer
'函数功能:数据块[st1..edl]与后面数据块交换(两数据块相邻且个数相等)
Function kSwap(st1 As Integer,ed1 As Integer)As String
Dim i As Integer,t As Integer,n1 As Integer
nl=ed1-st1+1
For i= ___
t=a(i):a(i)=a(i+n1):a(i+nl)=t
t=wz(a(i)):wz(a(i))=wz(a(i+n1)):wz(a(i+nl))=t
Next i
'将处理结果返回,代码略.
End Function
Private Sub Cmd l_Click()
Dim n As Integer,num As Integer,i As Integer,s As String
n=Val(Text1.Text)
'随机生成n个不重复正整数保存到a(1)到a(n)中,并在List1中显示,代码略.
For i=1 To n
wz(a(i))=i
Next i
For i=1 To n-1
If i<>wz(i)Then
        num= ___
If wz(i)-i<=num-(wz(i)-i)Then '按情况A处理
        s=kSwap(i,wz(i)-1):List1.AddItem s
E1se
        If num Mod 2=0 Then
            s=kSwap(i,i+num\2-1):Listl.Addlten s
Else
        If num Mod 2=0 Then
            s=kSwap(i,i+num\2-1):Listl. Addltem s
        Else
            s= ___:Listl. Addltem s
        End If
        i=i-1 '数字i交换到第i位置的处理尚未完成
End If
End If
Next i
End Sub
类型:操作题
难度系数:困难0.15
收藏
纠错
详情
给定一个m*m的矩阵,它表示一个箱子的侧视图。箱子的每一个格子的状态可能为图1所示, 表示钻石,表示固定的障碍物,将这个箱子顺时针旋转90°,由于重力原因,部分钻石的位置会发生改变。每个钻石会垂直掉落,直到它遇到阻挡(固定的障碍物、另一个钻石或者箱子的底部)。重力不会影响固定障碍物的位置,同时箱子旋转不会产生惯性,也就是说钻石的水平位置不会发生改变。图2为盒子顺时针90°以后的状态。

图1旋转前


图2顺时针90°以后


如果用数字来表示该矩阵,2表示钻石,1表示固定的障碍物,0表示空位置。随机生成一个m*m的矩阵在 List1中显示,点击Command1按钮,按照上述要求旋转90°后的矩阵在List2中显示。程序运行界面如图3所示:

图3


(1)若m=3时,矩阵存储在a中的值为“2,0,1,1,2,0,2,0,0”,顺时针旋转90°后,a(6)中存储的值为______
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Const m=6
Dim a(1 To m * m) As Integer'存储矩阵状态,2代表钻石,1代表固定障碍物,0代表空格
Private Sub Form_Load()
'生成初始矩阵保存到a数组并输出到List1中,代码略
End Sub
Private Sub Command1_Click()
Dim q(1 To m) As Integer    '存储有效空格位置
Dim f As Integer, t As Integer, k As Integer, p As Integer
f = 1: t = 1: k = m
'先模拟钻石下落过程
For i = 1 To m * m
If ______Then
q(t) = k
t = t + l
ElseIf a(k) = 1 Then
f = 1: t = 1
ElseIf f <> t Then
______
f = f + 1
a(k) = 0
q(t) = k
t = t + 1
End If
If k Mod m = 1 Then
f = 1: t = 1
k = k + 2 * m - 1
Else
k = k - 1
End If
Next i
'顺时针旋转90°后输出
p = (m - 1) * m + 1
For i = 1 To m * m
s = s + Str(a(p))
If i Mod m = 0 Then
List2.AddItem s
s = ""
p =_____
Else
p = p - m
End If
Next i
End Sub
类型:操作题
难度系数:困难0.15
收藏
纠错
详情
有如下VB程序段:
Dim i As Integer, j As Integer, cnt As Integer
Dim a(1 To 10) As Integer
Key=Val(Text1.Text)
cnt=0:i=1:j=10
Do While i <=j

cnt=cnt+i

m=Int(Rnd()*(j-i+1))+i

If a(m) >Key Then j=m-1 Else i=m+1


Loop
数组a(1)至a(10)的数据依次为:1、2、2、3、3、4、5、7、8、9.若查找键key等于2,执行该程序段后,下列说法正确的是:(       
A.cnt的值一定为4B.m的值一定为3
C.j的值可能为2D.i的值一定为4
类型:选择题
难度系数:困难0.15
收藏
纠错
详情
某算法程序如下:
   i=0:j=9:n=0
   Randomize
   Key=Int(10*Rnd)*2
   Do While i <=j
          m=(i+j)\2
          If Key <=d(m)Then
               j=m-1:n=n-1
          Else
               i=m+1:n=n+1
          End If
   Loop
   Label1. Caption=Str(n)
已知数组元素d(0)到d(9)的值依次是1、4、7、12、12、14、14、18、19、20,则该程序段执行后,Label1上显示的内容不可能是(       
A.-1B.0C.1D.-3
类型:选择题
难度系数:困难0.15
收藏
纠错
详情
疫情防控期间,某工厂为了将流水线上已生产的口罩及时装箱,并尽量分配给更多的疫情地区,需要设计一个程序实现自动化装箱。装箱要求为:流水线上生产的每包口罩数量有可能不同,装入箱子的口罩必须为流水线上连续的若干包,每箱内的口罩数量必须相同,在已知每包口罩数量和口罩总包数的前提下,装尽可能多的箱子。
例1:某流水线上有8包口罩,每包口罩的数量和装箱安排如下表:

序号

1

2

3

4

5

6

7

8

数量

12

3

9

6

6

9

3

12

箱号(方案1)

1

2

2

3

3

4

4

5

箱号(方案2)

1

1

2

2

3

3

4

4

箱号(方案3)

1

1

1

1

2

2

2

2

 

 

在上述情况下,有3种分箱方案,方案1为最优方案。
例2:某流水线上有8包口罩,每包口罩的数量和装箱安排如下表:

序号

1

2

3

4

5

6

7

8

数量

1

3

5

7

9

11

13

15

 

 

在上述情况下,没有符合要求的装箱方案。

 按照上述要求,编写一个VB程序,功能如下:窗体加载时,读取流水线上每包口罩的数量,并将结果显示在列表框List1中,点击“装箱”按钮后,在文本框Text1中输出分箱结果,若存在装箱方案,则输出最多的装箱数,否则输出“无方案”。程序界面如图所示。


(1)假如流水线上生产的每包口罩数量依次为“16,5,3,8,7,9”,按照上述装箱要求,则装箱结果为____。 
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Dim sum(0 To 1000) As Integer 'sum(m)存储前m包口罩的数量
Dim a(0 To 1000) As Integer
Dim n As Integer, i As Integer, pos As Integer 'n,i,pos为全局变量,i表示前i包口罩放在第1个箱子
Private Sub Form_Load()

List1.clear

'读取流水线上口罩包数n和每包口罩数,存入数组a中,并在List1中显示,代码略

End Sub
Private Sub Command1_Click()

 Dim s As String

 Dim tot As Integer, ans As Integer, cur As Integer

 For i = 1 To n

  sum(i) = sum(i - 1) + a(i)

 Next i

 ans = 0

 For i = 1 To n

  cur = i     '当前分箱最后一包口罩的序号

      _____

  pos = i + 1

  Do While pos <= n

    If find(pos, n, cur) Then    '寻找下一段符合方案的口罩数量和

      cur = pos

      tot = tot + 1

      Do While sum(pos) = sum(pos + 1) '若这包口罩数量为0则直接跳过

        pos = pos + 1

        cur = cur + 1

      Loop

      Else

        Exit For

      End If

      pos = pos + 1

    Loop

    If tot > 1 And     ____ Then  

      ans = tot

      Exit For

    End If

  Next i

  If ans > 0 Then

    Text1.Text = Str(ans)

  Else

    Text1.Text = "无方案"

  End If

End Sub

 

Function find(L As Integer, R As Integer, k As Integer) As Boolean

  Dim m As Integer, t As Integer

  find = False

  Do While L <= R

    m = (L + R) \ 2

    t = _____

    If t = sum(i) Then

      pos = m

      find = True

      Exit Function

    ElseIf t < sum(i) Then

      L = m + 1

    Else

      R = m - 1

    End If

  Loop

End Function

类型:操作题
难度系数:困难0.15
收藏
纠错
详情
首页
上一页
下一页
尾页