实现上述功能的VB程序如下,请回答下列问题。
Private Sub Command1_Click()
Dim i As Integer, n As Integer
Dim num As Integer, t As Integer
Dim a(1 To 50) As Boolean
List1.Clear
n = Val(Text1.Text)
For i = 1 To n
a(i) = True
Next i
t = n
Do While
For i = 1 To n
If a(i) Then
End If
If num = 3 Then
a(i) = False
t = t - 1
List1.AddItem Str(i)
End If
Next i
Loop
End Sub
For i= 1 To 49
j=1:a(j)=a(j)+1
Do While a(j)=5
a(j)=0
j = j + 1
a(j) = a(j) + 1
Loop
Next i
数组a中各元素初始值均为0,该程序执行后,数组a中各元素之和为( )
例如有这样三组数据:
a数组{3,4,5,7,15}
b数组{10,12,14,16,17}
c数组{20,21,23,24,37,40}寻找技巧步骤图所下所示:
此时,组合中最小的数15已是a数组的最后一个元素,所以最佳组合为15,16,20,最小距离为5。
Private Sub Ce_Click()
Dim a(1 To 100) As Integer, b(1 To 100) As Integer, c(1 To 100) As Integer
Dim s1 As String, ch As String, flag As Boolean
Dim i As Integer, j As Integer, k As Integer, m As Integer
Dim k1 As Integer, k2 As Integer, k3 As Integer
Dim md As Integer, cd As Integer
‘获取数组元素值分别存入三个数组中,其中b和c数组的存储过程略
s1 = Text1. Text
k1=0: flag=True
For i = 1 To Len(s1)
ch = Mid(s1, i, 1)
If ch <> ",”Then
①
a(k1) = a(k1) * 10 + Val (ch)
flag = False
Else
flag = True
End If
Next i
i=1: j=1: k=1: md=32767
Do While i<=k1 And j<=k2 And k<=k3 ‘k2,k3变量功能同k1
②
If cd<nd Then md=cd
m= min(a(i), b(j),c(k))
If m= a(i) Then
i=i+1
ElseIf m = b(j) Then
j=j+1
Else
③
End If
Loop
Label4. Caption = Label4. Caption + Str (md)
End Sub
Function min(x As Integer, y As Integer, z As Integer) As Integer
If x<y Then min=x Else min=y
If min>z Then min=z
End Function
Function max(x As Integer, y As Integer, z As Integer) As Integer
If x>y Then max=x Else max=y
If max<z Then max=z
End Function
①②③
⑴用数组依次存储每个非降序数列中最大的元素(查找过程中的最大值),初始时b(1)为数组a第1个元素。
⑵加入方法:将a(i)与数组b中的每个元素依次逐个比较:
若a(i)不比b(j)小就用a(i)替换b(j)中的值;将a(i)添加到第j个非降序数列中,并连接到c数组的c(j)中。
若a(i)比b(j)都小,则在数组b最后添加新的元素值为a(i),即将a(i)添加到第j+1个下降数列中,并连接到c数组的c(j+1)中。
⑶若数组a各元素的值为:12,36,16,36,27,18时,则3个非降序数列分别为:“12,36,36”,“16,27”,“18”。
程序运行界面如下图所示:
小明依据上述描述设计了如下VB程序。请回答下列问题:
Const m=15
Dim a(1 To m) As Integer Private Sub Form_Load()
‘读取m个数据,依次存储到 a(1)、a(2)、……a(m)中,代码略End Sub
Private Sub Command1_Click()
Dim b(1 To m) As Integer '存储数列最大的值Dim c(1 To m) As String ‘存储非降序数列Dim i As Integer
Dim bottom As Integer Dim j As Integer
Dim bn As Integer ‘存储非降序数列的个数List1.clear
b(1) = a(1)
①
c(1) = Str(a(1))
For i = 2 To m
For j = 1 To bn
If ② Then
b(j) = a(i)
Exit For
End If
Next j
If j > bn Then
bn = bn + 1
③
c(b(n)) = Str(a(i))
End If
Next i
For i = 1 To bn
List1.AddItem c(i)
Next i
Text2.Text = "数列中共有" + Str(bn) + "个非降序序列"
End Sub
① ② ③
•第1段是从数组首个元素开始,元素值都属于第1区间的最长连续元素段,如果首个元素不属于第1区间,则第1段元素个数为0;
•第1段分割后的剩余元素,用同样的方法来依次分割第2段、第3段、…、第m段;
•第m段分割后的剩余元素分割到第m+1段(剩余段)。
若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第p段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分割到m段“非重叠块”,第m段“重叠块”的元素个数为0。一个数组分段示例如图。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续3个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含33,58,46,第3段“重叠块”包含55,62,69。
Const n = 18: m = 6
Dim a(1 To n) As Integer
Dim b(1 To 2 ∗ m) As Integer
'b(1)、b(2)为第 1 区间的下限和上限,b(3)、b(4)为第2区间的下限和上限,…
Dim c(1 To 2 ∗ m + 1) As Integer
'数组c用于保存统计结果:
'c(1)、c(2)分别存储第1段"非重叠块"和"重叠块"的元素个数,
'c(3)、c(4)分别存储第2段"非重叠块"和"重叠块"的元素个数,…
'c(2m-1)存储第m段"非重叠块"元素个数,c(2m)存储
第m段"重叠块"的元素个数(值为0)
'c(2 m+1)存储剩余段元素个数
Private Sub Command1_Click()
Dim i As Integer, p As Integer, L As Integer, LL
As Integer
'读取n个数据并保存在数组a中,代码略
'读取m个区间的下限和上限并保存在数组b中,代码略
For i = 1 To 2 ∗ m + 1
c(i) = 0
Next i
i = 1: p = 1
L = 0: LL = 0
Do While i <= n And p <= m
If IsIn(i, p) Then
If Then
LL = LL + 1
Else
L = L + LL + 1
LL = 0
End If
i = i + 1
Else
c(2 ∗ p - 1) = L
c(2 ∗ p) = LL
L = 0
p = p + 1
End If
Loop
If i <= n Then
Else
c(2 ∗ p - 1) = L
c(2 ∗ p) = LL
End If
'输出统计结果,代码略
End Sub
'函数IsIn用来判断a(i)值是否属于第p区间
Function IsIn ( i As Integer, p As Integer )
As Boolean
If a(i) >= b(2 ∗ p - 1) And a(i) <= b(2 ∗ p)
And p <= m Then
IsIn = True
Else
IsIn = False
End If
End Function
If temp>=a(n) Then
a(n+1)=temp
Else
j=n
Do While j>=1 And temp<a(j)
j=j-1
Loop
End If
要使程序实现上述功能,则方框①②中的语句分别是( )
n = 7
d(1) = 123: d(2) = 35: d(3) = 43: d(4) = 23: d(5) = 56: d(6) = 78: d(7) = 132
k = 1
For i =2 To n
For j = ⑴
If ⑵ Then
tmp = d(j): d(j) = d(j + 2): d(j + 2) = tmp
End If
Next j
k = -k
Next i
执行该程序段后,d 数组各元素为“132,23,123,35,56,78,43”,上述程序段中方框处可选语句为:
①i -1 To n - 2
②1 To n - i
③d(j) * k > d(j + 2) * k
④d(j) * (-k) > d(j + 2) * (-k)
则(1)(2)处语句依次可为( )
list=['a','b','c','d','e','f','g']
list1=[]
list2=[]
for i in range(7):
if i%2==0:
list1.append(list[i])
else:
list2.append(list[i])
print(list1)
print(list1)
◆菜单显示功能:输出菜价小于等于预算经费余额且在售的菜品;
◆订单管理功能:包括输出订单中的菜品信息,订单菜品的删除和添加等。
上述可填的内容为:(单选,填字母:A .数组、链表/B .链表、数组)
|
编号 |
菜品名称 |
菜品价格(单位:分) |
当月销量 |
|
0 |
太湖三宝 |
18800 |
535 |
|
1 |
湖羊肉 |
11800 |
446 |
|
… |
… |
… |
… |
|
n-1 |
白果芦笋 |
0 |
2 |
程序运行结果如图所示,请在划线处填入合适的代码。
#读取餐馆全部菜品数据保存到menu中,数据类型及格式见题干描述,代码略。
sal=int(input("☆ 请输入你的消费预算(单位:分):"))
print("☆ 可供选择的菜品:")
for i in range(len(menu)):
if and menu[i][2]<=sal:
print(' ',menu[i])
n=input("☆ 请输入预选择的菜品编号,以逗号分隔:").split(',')
x=len(n)
lis=[[int(n[i]),i+1] for i in range(x)]
lis[x-1][1]=-1
p=0
while p!=-1:
bh=lis[p][0]
if menu[bh][2]<=sal:
y=p
else:
lis[y][1]=lis[p][1]
p=lis[p][1]
p=0;s=''
while p!=-1:
s+=menu[lis[p][0]][1]+' '
print('☆ 点单成功的菜品:'+s)
print("☆ 剩余金额:"+str(sal))
