s1 = Text1.Text
s2=“”
For i=1 To Len(s1)
ch=Mid(s1, i, 1)
If ch>=“A” And ch<=“Z” Then
′提示:“A”的ASCII码值为65,“a”的ASCII码值为97
End If
s2=s2 & ch
Next i
Text2.Text = s2
要使程序实现上述功能,则方框中的代码是( )
以下VB程序在a数组中保存了下一个要报数的人的编号,即若。(w)=p,则表示当第w个人报过数2后,下一个要报数的是第p号。程序在列表框Listl中输出了依次出圈的人的编号,在标签Label1中输出了最后剩下的人的编号。请完善程序。
Private Sub Command1_Click( )
Dim i As Integer, n As Integer, w As Integer, num As Integer
Dim a(1 To 100)As Integer, t As Integer
n=Val(Text1.Text)
For i=1 To n-1
a(i)=i+1
Next i
a(n)=1
w=n ‘变量w表示当前检查的是第w号数组元素,即从第n号开始检查
t=0 ‘变量t用以模拟报数
Do While ①
num=a(w) ‘当前报数的人的编号
t=t+1
If t=3 Then
List1.AddItem Str(num)
a(w)= ②
t=0
Else
③
End If
Loop
Label1.Caption=Str(w)
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
(1≤t(i)≤N)内完成,可以提前完成,但不能晚于该时段完成,否则要从奖金M元中扣去一部分奖金w(i),w(i)为自然数,不同的游戏扣去的奖金是不一样的。每个游戏必须从整时段开始。请间小炫如何安排自己做游戏的顺序,才能赢取最多的奖金?将结果输出到文本框Text1中。注意;比赛绝对不会让参赛者赔钱。例如:当N=5,M=100时,
游戏编号 |
1 |
2 |
3 |
4 |
5 |
完成期限t(i) |
1 |
4 |
2 |
3 |
2 |
扣除奖金数w(i) |
5 |
4 |
10 |
8 |
7 |
最优方案为:
完成时段 |
5 |
4 |
2 |
3 |
1 |
其中第一个游戏无法在期限内完成,扣除5元,最后赢取100-5=95元。
章法思想:让扣款高的游戏尽量准时完成,扣除的奖金越少,则最后赢取的奖金越多。
⑴按扣款数值从大到小排序,顺序为3,4,5,1,2。
⑵对于游戏,在时间段1到t(i)内完成的效果都是一样的,所以尽量在时间段t(i)内完成,若该时段
已经被占用,则依次考察时间段t(i)-1,t(i)-2…,1。
①考虑游戏3,放置在时间段2完成(注:t(3)=2);
②考虑游戏4,放置在时间段3完成(注:t(4)=3);
③考虑游戏5,时间段2已经被游戏3占用,放置在时间段1完成(注:t(5)-1=1);
④考游游戏1,时间段1已经被游戏5占用,不能按时完成,放到时间段5;
⑤考虑游戏2,放置在时间段4完成(注:t(2)=4)。
实现上述功能的VB程序如下。请在画线处填入合适的代码。
Dim N As Integer,M As Integer
Dim t(1 To 100)As Integer ‘变量t(i)表示第i个游戏的完成期限
Dim w(1 To 100)As Integer ‘变量w(i)表示未完成第i个游戏要扣除的奖金
Dim f(1 To 100)As Boolean ‘变量f(i)表示第i个时段是否已经被占用
Private Sub Form_Load( )
‘生成时段数量N和初始奖金数M
‘生成t数组和w数组
End Sub
Sub swap(x As Integer,y As Integer) ‘自定义过程,可以用Call语句来调用该过程
Dim z As Integer
z=x:x=y:y=z
End Sub
Sub sort( ) ‘自定义过程,可以用Call语句来调用该过程
Dim x As Integer, I As Integer, j As Integer
For i=1 To N-1
For j=i+1 To N
If w(i)<w(j)Then
Call swap(w(i),w(j)) ‘调用自定义过程
①
End If
Next j
Next i
End Sub
Private Sub Command1_Click( )
Dim i As Integer,k As Integer,p As Integer
Call sort ‘调用自定义过程
tot=0
For i=1 To n
f(i)=True
Next i
For i=1 To N ‘对每个游戏从该游戏的规定期限开始往左找时间段,找到则完成该游戏
p=-1
k=t(i)
Do While k>0 And p=-1
If f(k)=True Then
p=k
Else
②
End If
Loop
If p=-1Then tot=tot+w(i)
Next i
③
Text1.Text=Str(ans)
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
for i in range(1,5):
print(‘#’*i)
但是,当数据范围很大时,需要的桶则非常多,会造成很大的资源浪费。为了解决该问题,小张对桶排序进行了优化,算法思想如下:
① 先依据数组中元素的个位进行桶排序;
② 再依据数组中元素的十位进行桶排序;
......
直到排序完成。
例如:有数组 a 中各元素分别为 53,3,542,748,17,214,154,63,616,第一趟按个位排序过程如下:
① 个位填入相应桶编号中,并统计每个桶中数据个数。
② 计算索引。计算方法是从前往后,依次计算当前桶中元素个数与前一项之和。
③按索引从桶中倒序取出数据,每取一个索引减 1。重新排列后为542,53,3,63,214,154,616,17,748。
接下来对重新排序后的数据以十位、百位依次进行桶排序即可完成排序(每一趟排序后数据重新排列)。
Const n = 10
Dim a(1 To n) As Integer
Dim tmp(1 To n) As Integer '临时数组,用来保存桶排序后的结果
Dim count(0 To 9) As Integer
Dim i As Integer, j As Integer
Dim s As Integer, k As Integer
Private Sub Form_Load( )
'待排序数据保存在a数组中,代码略
End Sub
Private Sub Command1_Click( )
s = 1
For i = 1 To
For j = 0 To 9 '初始化数组
count(j) = 0
Next j
For j = 1 To n '统计各桶中数据个数
k = (a(j) \ s) Mod 10
count(k) = count(k) + 1
Next j
For j = 1 To 9 '计算索引
count(j) =
Next j
For j = n To 1 Step -1 '根据索引,从桶中取出数据,放入tmp数组
k = (a(j) \ s) Mod 10
count(k) = count(k) - 1
Next j
For j = 1 To n '数组a重新排列
a(j) = tmp(j)
Next j
s = s * 10
Next i '输出排序后的数据,代码略。
End Sub
s = 0: x ="0123456789": i = 1
Do While i <= Len(x)
t = Val(Mid(x,i,2))
If t Mod 3 = 0 Then s = s + t
i = i + 1
Loop
执行该段程序后,s的值为( )
Private Sub Command1_Click( )
Dim s As String, s1 As String, c1 As String, c2 As String
Dim i As Integer, t As Integer 't 用于统计相同字符的个数
c1 = Mid(s,1,1) : s1 = ""
t = 1
For i = 2 To Len(s)
c2 =
If c1 <> c2 Then
If t = 1 Then s1 = s1 + c1
t = 1
Else
t = t + 1
End If
Next i
Text2.Text = s1
End Sub
如:输入十进制数35,将其转换为二进制数为100011,其中最长连续数字是3个“0”。程序运行界面如图所示。
Private Sub Command1_Click()
Dim n As Integer, i As Integer, j As Integer, m As Integer
Dim s As String, ch As String, ch1 As String, ch2 As String
n = Val (Text1. Text)
Do While n<>0
s=CStr(n Mod 2)+s ‘CStr将数字转化为字符串,但不会有前导空格
Loop
ch1 = Mid(s, 1, 1): ch = ch1
i=2:j=1:m=0
For i=2 To Len(s)
ch2 = Mid(s, i, 1)
If Then
If i-j> m Then
m=i-j
ch = ch1
End If
ch1 = ch2
End If
Next i
Text2. Text = Str(m) & “个”& ch
End Sub
s1 = Text1.Text: s2 = Text2.Text
i = 1: j = 1
Do While i <= Len(s1) And j <= Len(s2)
If Mid(s1, i, 1) = Mid(s2, j, 1) Then
Loop
If Then Label1.Caption = "是子串" Else Label1.Caption = "不是子串"
方框处的可选语句为:
①i = i + 1 ②j = j + 1 ③i > Len(s2) ④j > Len(s2)
以下选项正确的是( )
i=1
Do While i<=5
If i = 0 or a(i - 1)<= a(i) Then
i=i+1
Else
t=a(i): a(i)=a(i-1): a(i-1)=t
i=i-1
End If
Loop
数组元素a(0)到a(5)依次为:“0,41,22,53,99,36”,经过该程序段处理后,数组元素a(3)的值为( )
Dim c(-10 To 10) As Integer, a(1 To 10) As Integer, b(1 To 10) As Integer
a(1)=58:a(2)=88:a(3)=66:a(4)=60:a(5)=78
a(6)=32:a(7)=54:a(8)=75:a(9)=99:a(10)=69
Label1. Caption =
For i=1 To 9
b(i)=a(i+1)-a(i)
c(b(i)\10)=c(b(i)\10)+1
Next i
For i=0 To 10
If c(i) > 0 Then Label1.Caption = Label1.Caption + Str(c(i))
Next i
已知数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是( )
x=0
while(x!=4): #当x=!4时,执行循环
print('1. 添加订单')
print('2. 发货')
print('3. 查看订单列表')
print('4. 退出')
x=int(input("输入你的选择:")) #输入选择项
if 1 :
y=input("输入订单编号:") #输入订单编号
2 #在列表listque中添加订单号
elif x==2:
3 #如果订单列表为空
print("订单列表为空")
else:
print("发货单号:"+listque.pop(0))
elif x==3:
print("等待发货:",listque) #查询列表listque中的订单号
print()
input("运行完毕,请按回车键退出...")
此列表,定义的是( )列表。(从“空、非空” 里选填); 补充划线1/2/3处的内容。
n=1
for i in range(1,5):
n=n*i
print(n)
程序描述: 计算正整数35到500之间的所有奇数的和。代码如下:
①
for i in ②
③
print(s)
Dim a(1 To 26)As Integer
s=Text1. Text
For i=1 To Len(s)
①
If c>="A" And c<="Z" Then c=Chr(Asc(c)+32)
②
Next i
For i=1 To 26
If a(i)<> 0 Then Label1.Caption= Label1.Caption+ ③
Next i
x = 0
For i = 0 To 20 Step 2
If i Mod 3 = 0 Then x = x + i
Next i
该程序段执行后,变量x的值是( )
程序运行时,输入:685,运行输出结果是:
⑴请填空完善该程序,实现功能:键盘依次输入6名同学身高,输出最高身高和最矮身高的值。
⑵编写完成后原名保存并关闭应用软件。
height=[]
for i in range(0,):
x=float(input("请输入身高:"))
height.append()
print(max(), min(height))
input("运行完毕,请按回车键退出...")
s1 = Text1.Text: s2 = "":n = Len(s1): i = 1
Do While i <= n
ch = Mid(s1, i, 1)
If ch <> "." Then
p = 8: x = Val(ch)
Do While p > 0
Loop
Else
s2 = s2 & ch
End If
i = i + 1
Loop
方框中的代码由以下三部分组成:
①x = x Mod p ②p = p \2 ③s2 = s2 & x \p
下列选项中,代码顺序正确的是( )