
例如:如图所示,有4个队8位队员,地上一排格子的数字依次为2、1、1、7、9、2、5、6。若某队甲队员站在第4个格子,则其分数为2+1+1+7=11;乙队员站在第7个格子,则其分数为5+6=11。两者相等,则该队获胜。
|
gz(1) |
gz(2) |
gz(3) |
gz(4) |
gz(5) |
gz(6) |
gz(7) |
gz(8) |
|
←→ |
|||||||
|
2 |
1 |
1 |
7 |
9 |
2 |
5 |
6 |
|
甲 乙 |
|||||||
Dim n As Integer
Dim gz(1 To 20) As Integer
Private Sub Command1_Click()
Dim dfa As Integer, dfb As Integer
Dim ta As Integer, tb As Integer
Randomize
For i = 1 To 2 * n
gz(i) = Int(Rnd* 9 + 1)
List1.AddItem “gz(“ & i & ”)” & gz(i)
Next i
num = 1
For j = 1 To 2 * n
ta = j
dfa = zwdf(ta, True)
For k = 1 To 2 * n
tb = k
If dfa = dfb Then
List2.AddItem num & “甲队员(“ & j &”)得分=” & dfa & “乙队员(“ & k & ”)得分=” & dfb
num = num + 1
End If
Next k
Next j
List2.AddItem “获胜的站法共有:”++ “种”
End Sub
Function zwdf(p As Integer, r As Boolean) As Integer
Dim fs As Integer
If r = True Then
fs = fs + gz(i)
Next i
Else
For i = p To 2 * n
fs = fs + gz (i)
Next i
End If
zwdf = fs
End Function
⑴将第一个整数各位上的数字按照从低位到高位的顺序依次存入数组a(1)、a(2)、…、a(La)中,将另一个整数各位上的数字按照从低位到高位的顺序依次存入数组b(1)、b(2)、…、b(Lb)中。其中,La表示第一个整数的位数,Lb表示第二个整数的位数;
⑵按照从低位到高位的顺序,将两个整数各位数值进行逐位乘法计算(第一轮先让b(1)依次乘以a(1)、a(2)、…、a(La),第二轮再让b(2)依次乘以a(1)、a(2)、…、a(La),依次进行),每位的乘法结果也按照低位到高位的顺序依次存入数组ans(1)、ans(2)、ans(3)…中;
⑶对数组ans中的计算结果进行从低位到高位的进位处理;
⑷统计数组ans中实际计算结果的有效数值位数,并将位数值存入变量length;
⑸按照高位到低位的顺序输出数组ans中的计算结果。
小强按照上述方法设计了一个两数进行高精度乘法计算的VB程序,功能如下:在文本框Text1和Text2中依次输入两个整数,单击“计算”按钮Command1,程序进行高精度乘法计算,并在标签Label4中输出计算结果。下面信息显示了进行高精度乘法计算的主要过程(假设输入的两个整数分别为“123”和“45”):
图a
图b
程序运行效果如图所示。
图c
实现上述功能的VB程序如下:
Dim a(1 To 30)As Integer, b(1 To 30) As Integer, ans (1 To 60) As Integer
Dim La As Integer, Lb As Integer, length As Integer
Private Sub Command1_Click()
Dim i As Integer, j As Integer, t As Integer, temp As String
'将两个乘数(正整数)各数位上的数字按照上述算法依次存入数组a和b,每个正整数位数分别保存到变量La和Lb;将保存结果的数组ans(i)值初始化为零(该部分程序代码略)
For i=1 To Lb
For j=1 To La
ans(i+j-1) =
Next j
Next i
For i=1 To La+Lb
ans(i+1)=ans(i+1)+ans(i)\10
ans(i)=
Next i
length=La+Lb
Do While ans(length)=0
length=length-1
Loop
For i= To 1 Step -1
Label4.Caption=Label4.Caption&Str(ans(i))
Next i
End Sub
For i=1 To 6
a(i)=Int(Rnd*10)+1
Next i
For i=1 To 5
If i Mod 2=1 And a(i)>a(i+1)Then
t=a(i):a(i)=a(i+1):a(i+1)=t
Else
a(i)=a(i)+1
End If
Next i
执行程序后,a数组各元素可能是( )
①上靠,例如放回的牌数字为7,可以把牌放在第2堆的最下面,则原来登记的记录变成(1,3),(5,3),(11,1),牌还是3堆。
②下靠,例如放回的牌数字为10,可以把牌放在第3堆的最上面,则原来登记的记录变成(1,3),(5,2),(10,2),牌还是3堆。
③上下不靠,例如放回的牌数字为9,则单独放一堆,登记的记录变成(1,3),(5,2),(9,1),(11,1),牌变成4堆。
④上下靠,例如放回的牌数字为4,则合并第1堆和第2堆,登记的记录变成(1,6),(11,1),牌变成2堆。
小王依据上述描述设计了如下VB程序。请回答下列问题:
Const n=5000
Dim a(0 To n)As Integer 'a(i)保存第i条记录的最顶端的牌
Dim b(0 To n)As Integer 'b(i)保存第i堆牌的张数
Dim c As Integer,k As Integer,sp As Integer 'k为原始记录数
'读取原始k条记录的数据,依次存入a(1),b(1),a(2),b(2)…a(k),b(k),代码略
a(0)= 0:b(0)=0:sp=k +1:a(sp)=10000:b(sp)=0
Private Sub Command1_Click()
Dim i As Integer
c=Val(Text1.Text) 'c 为放回的牌号
i=1
Do While a(i)<c '查找牌c放的位置
i=i+1
Loop
i=i-1
'下面为放牌过程
If a(i)+ b(i)=c Then
If ① Then '第4种情况,上下靠
b(i)=b(i)+1+ b(i+1)
For j=i+1 To sp-1
a(j)=a(j+1):b(j)=b(j+1)
Next j
sp=sp - 1
Else '第1种情况,上靠
b(i)=b(i)+1
End If
Elself c+ 1=a(i+1)Then'第2种情况,下靠
a(i + 1)=c:b(i+1)= b(i+1)+1
Else '第3种情况,上下不靠
For j= ②
a(j)=a(j-1):b(j)=b(j-1)
Next j
a(i+1)=c:b(i+1)=1:sp=sp+1
End If
'下面为输出登记的记录,不包括虚设的两条记录
For i=1 To ③
List3.Addltem“第”&Str(i)&“记录(”&Str(a(i))&“,”&Str(b(i))&“)”
Next i
End Sub
①②③
i=1:j=8:k=0
Key=Int(Rnd*50)*2+3
Do While i<=j
m=(i+j+1)\2
If Key=a(m)Then
Exit Do
ElseIf Key <a(m)Then
i=m+1:k=k+1
Else
j=m-1:k=k-1
End If
Loop
Text1.Text=Str(k)
数组元素a(1)到a(8)的值依次为“88,66,50,46,24,20,18,6”,执行该程序段后,k的值不可能是( )
n=10
For i=1 Ton-1
For j=i+1 To n
If a(i)=a(j)Then
a(j)=a(n)
n=n-1
End If
Next j
Next i
若数组a中的元素为“3,3,7,7,11,11,15,15,19,19”,则该程序执行后,数组a中的n个元素值依次为( )
import matplotib. pyplot as plt
def track(file): #绘制GPS坐标轨迹
jd=[ ] #经度
wd=[ ] #纬度
for line in open(file):
#切分行数据生成列表
line_data=line. split(',')
#取轨迹坐标
jd. append(x)
wd. append(y)
plt. plot(jd, wd)
filename='Taxi_ 105. txt'
track(filename)
plt. show( )
小李为了解决该问题,首先结合数组a的有序性,找出a,b两个数组中要剔除的m个数据,再将数组b中保留的数据插入到数组a中。示例如下:
|
n=10,数组a:2,4,6,8,10,12,14,16,18,20 m=5,数组b:41 , 11,17 , 29,9 处理后的数组a:2,4,6,8,9 , 10,11 , 12,14,16 |
Const n=1000,m=50
Dim a(1 To n)As Integer, b(1 To m)As Integer
Function getImax(k As Integer)As Integer
‘在数组元素b(1)~b(k)中找出值最大的元素,返回其下标,代码略
End Function
Private Sub Commandl_Click( )
Dim i As Integer, j As Integer, k As Integer
Dim na As Integer, nb As Integer, imax As Integer, mean As Integer
‘读取数据分别存入数组a、b,代码略
na=n : nb=m
imax=getImax(nb)
For i=1 To m
If a(na)<= Then
b(imax)=b(nb)
nb=nb-1
If nb>0 Then imax=getImax(nb)
Else
na=na-1
End If
Next i
Do While nb>0
i=1 : j=na
imax= getImax(nb)
Do While i<=j
mean =(i+j)\2
If a(mean)<b(imax) Then i= mean +1 Else j=mean-1
Loop
For k=na To 1 Step-1
Next k
a(i+nb-1)=b(imax)
b(imax)=b(nb)
nb=nb-1
Loop
'输出数组a,代码略
End Sub