⑴把格雷码第1位G1作为解码后二进制码的第1位B1,即:B1= G1;
⑵从第2位起,将格雷码每一位与左边相邻一位的解码值作异或运算,结果作为该位格 雷码的解码值,即Bi=Gi⊕Bi-1。例如,某格雷码1101110,可解码成普通二进制码 1001011, 如图所示。
异或运算(⊕)规则:如果 a、b 两个值不相同,则 a⊕b 结果为 1;如果 a、b 两个值 相同,则 a⊕b 结果为 0,即:0 ⊕ 0 = 0,1 ⊕ 0 = 1,0 ⊕ 1 = 1,1 ⊕ 1 = 0。
小明编写了一个格雷码解码的VB程序,功能如下:在文本框Text1中输入格雷码,单击 “解码”按钮 Command1,程序对输入的格雷码进行转换处理,转换后的二进制码用十六进 制表示并显示在文本框 Text2 中。程序运行界面如图所示。
Const max = 16
Function btoh(s As String) As String
Dim i As Integer, value As Integer, ss As String
Dim c1 As Integer, c2 As Integer, c3 As Integer, c4 As Integer ss = ""
If Len(s) Mod 4 <> 0 Then
s = Mid("0000", 1, 4 - n) + s '四位一组分组,最后一组不足 4 位补 0
For i = 1 To Len(s) Step 4
c1 = Val(Mid(s, i, 1))
c2 = Val(Mid(s, i + 1, 1))
c3 = Val(Mid(s, i + 2, 1))
c4 = Val(Mid(s, i + 3, 1))
value = c1 * 2 ^ 3 + c2 * 2 ^ 2 + c3 * 2 + c4
If value <= 9 Then
ss = ss + Chr(Asc("0") + value)
Else
End If
btoh =ss
Next i
End Function
Private Sub Command1_Click() Dim i As Integer
Dim s As String, b As String Dim g(1 To max) As String
s = Text1.Text: length = Len(s)
For i = 1 To length
g(i) = Mid(s, i, 1)
Next i
b = g(1)
For i = 2 To length
If g(i) =Then b = b + "0" Else b = b + "1"
Next i
Text2.Text =
End Sub
删数的算法如下:
⑴如果k>0,则从前往后检测相邻字符,否则,转⑶;
⑵①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转⑴;
②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到⑴;
⑶去掉串首的0,输出结果。按照上述算法思路,编写了VB程序,功能如下:在文本框Text1中输入数字串,在文本框Text2中输入删数的个数,单击“处理”按钮Command1,在文本框Text3中显示最小的整数。程序运行界面如图所示。
delete 函数说明:delete(st,x,y)为自定义函数,功能为在字符串st中删除x 位置开始的y 长度的子串。
Private Sub Command1_Click()
Dim s As String, k As Integer, i As Integer, j As Integer, n As Integer
s = Text1.Text
k = Val(Text2.Text)
n = Len(s)
Do While k > 0
i = 1
Do While i < n And
i = i + 1
Loop
If i = n Then
n = n - k
k = 0
Else
s = delete(s, i, 1)
n = n - 1
End If
Loop
i = 1
Do While n > 1 And Mid(s, 1, 1) = "0"
s = delete(s, 1, 1)
I = i + 1
n = n - 1
Loop
Text3.Text = s
End Sub
Function delete(st As String, x As Integer, y As Integer) As String
'mid 函数第3个参数省略,则截取从开始位置向右到字符串结尾的所有字符
delete = Mid(st, 1, x - 1) + Mid(st, x + y)
End Function
假如我们用数组表示上述大根堆:
a(1) |
a(2) |
a(3) |
a(4) |
a(5) |
a(6) |
a(7) |
a(8) |
a(9) |
9 |
6 |
8 |
5 |
3 |
4 |
7 |
2 |
1 |
现有一算法把一个无序数组改造成大根堆。例如:我们在上图的大根堆中再增加一个值为8的新元素,如下图所示。
数组存储为:
a(2) |
a(3) |
a(4) |
a(5) |
a(6) |
a(7) |
a(8) |
a(9) |
a(10) |
6 |
8 |
5 |
3 |
4 |
7 |
2 |
1 |
8 |
具体操作方法如下:
第一步:因为a(10)大于它的双亲结点a(5),故需交换a(10)和a(5)的值;
数组存储为:
第二步:因为a(5)大于它的双亲结点a(2),故需交换a(5)和a(2)(t)值;
数组存储为:
a(1) |
a(2) |
a(3) |
a(4) |
a(5) |
a(6) |
a(7) |
a(8) |
a(9) |
a(10) |
9 |
8 |
8 |
5 |
6 |
4 |
7 |
2 |
1 |
3 |
第3步:因为a(2)不大于它的双亲结点a(1),故无需做交换操作。此时新元素已经放到了正确的位置,新的大根堆构造完成,上移行动结束。
实现上述功能的程序代码如下请在划线处填入合适的代码。
Dim a(1 To 100) As Integer
‘该函数功能为实现数据的对齐输出
Function pout(x As Integer, y As Integer) As String
代码略
End Function
Private Sub Command1_Click()
Dim tmp As Integer, Dim m As Integer
Dim n As Integer, Dim s As String
n = Val(Text1.Text)
For i=1 To n
a(i) = Int(Rnd()*99)+ 1
Next i
For i= 2 To n
p=i
f=p\2
Do While ①
tmp = a(p): a(p)= a(f): a(f) = tmp
p=f
f=p\2
If f= 0 Then Exit Do
Loop
Next i
k= n
Do While k >=1
m=m+1
②
Loop
k= 1
For i=0 To m- 1
s=""
For j= 1 To ③
If k> n Then Exit For
s=s+ pout(a(k), (2^(m-1)-2^i)/2^i)
k=k+ 1
Next j
List1.AddItem s
Next i
① ② ③
import pandas as pd
s1 = pd.Series(range(1,10,2))
print(s1)
该程序段运行后输出结果为( )
Private Sub Command1_Click()
Dim i As Integer, m As Integer, f As Integer, tmp As String, flag As Boolean
Dim s As String, ch As String, sex As Integer, cm As Integer, cf As Integer
k = 0: sex = 0: m = 0: f = 0
s = Text1.Text
For i = 1 To Len(s) - 1
ch = Mid(s, i, 1)
If ch = "," And Mid(s, i + 1, 1) = "男" Then
tmp = Mid(s, i + 3, 3)
sex = 1
flag = True
ElseIf ch = "," And Mid(s, i + 1, 1) = "女" Then
tmp = Mid(s, i + 3, 3)
cf = cf + 1
flag = True
End If
If flag = True Then
m = m + sex * Val(tmp)
f =
sex = 0
i = i + 5
End If
Next i
Label1.Caption = "男生平均身高:" + Str(m / cm) + "女生平均身高:" + Str(f / cf)
End Sub
①输入两个数A,B;
②如果A大于B,则将A的值赋给C,B的值赋给A,C的值赋给B;
③如果A不大于B,则A、B的值保持不变;
④输出A,B;
⑤结束。
实现上述功能的代码如下。请回答下列问题:
Dim xh(0 To 100) As String .
Dim cj(0 To 100) As Integer
Const num = 50
Private Sub Form_ Load ()
‘本过程从数据库读取每位学生的学号和成绩存放在数组xh和cj中,代码略
End Sub
Private Sub Com1_Click ()
Dim i As Integer, m As Integer, n As Integer, k As Integer, a As Integ
a = Val(Text1.Text)
For i=1 To num-1
k=
If k<>i Then
t=cj(k):cj(k)=cj(i):cj(i)=t
s=xh(k):xh(k)=xh(i):xh(i)=s
End If
Next i
m=a-1:n=a+1
Do While cj(m) = cj(a)
m=m-1
Loop
Do While cj(n) = cj(a)
n=n+1
Loop
If m<>0 And Then lq = m Else lq=n-1
Label5.Caption = Str(lq)
Label6.Caption = Str(cj(lq))
List1.AddItem “字号”+“学号”+“成绩”
For i=1 To lq
List1.AddItem Str(i) +“ ”+xh(i)+Str(cj(i))
Next i
End Sub
Function imax(x As Integer, y As Integer) As Integer
Dim i As Integer,j As Integer
i=x
For j=x+1 To y
If Then i=j
Next j
imax = i
End Function
⑴枚举两根短的木棒a和b;
⑵当a <> b 时,组合的数量= 长度为a 的木棒根数×长度为b 的木棒根数×长度为(a+b)的木棒取两根的取法数量;
⑶当a = b 时,组合的数量= 长度为a 的木棒取两根的取法数量×长度为(a+b)的木棒取两根的取法数量。
如木棒长度分别为“1,1,2,2,3,3”,当a=1,b=2 时,则c=d= 3,该情况的组合数量=(长度为1 的根数)*(长度为2 的根数)*(长度为3 的根数取两根的取法数量)= 2 *2 * 1 = 4。长度为3 的根数取两根的取法数量,即
程序运行界面如图所示,在文本框Text1输入一堆木棒的长度,以逗号间隔,点击“计算”按钮Command1后在标签Label1显示方案总数。
请回答下列问题:
Private Sub Command1_Click( )
Dim tmax As Integer, ans As Integer, k As Integer
Dim i As Integer, a As Integer, b As Integer, tmp As Integer
Dim c As String, s As String
Dim t(20) As Integer
'储存相同长度木棒的数量,如t(5)的值是长度为5的木棒的数量
s = Text1.Text
tmp = 0: k = 0
ans = 0: tmax = 0
For i = 1 To Len(s)
c = Mid(s, i, 1)
If c = "," Then
k = k + 1
t(tmp) =
If tmp > tmax Then tmax = tmp
tmp = 0
Else
tmp = tmp * 10 + Val(c)
End If
Next i
For a = 1 To tmax \ 2 '枚举两根短的木棒
For b = a To tmax
If a + b > tmax Or t(a) * t(b) * t(a + b) = 0 Then Exit For
If Then
ans = ans + js(t(a), 2) * js(t(a + b), 2)
Else
ans = ans + js(t(a), 1) * * js(t(a + b), 2)
End If
Next b
Next a
Label1.Caption = "共有" + Str(ans) + "种方案"
End Sub
Function js(x As Integer, y As Integer) As Integer
'计算在x个对象中取y个对象的组合数量,即
'代码略。
End Function
Dim s1 As String, s2 As string, maxstr As string
Dim len1 As Integer, len2 As Integer, maxlen As Integer
Function Min (a As Integer, b As Integer) As Integer
If a >=b Then min = b else min = a
End Function
Function Search (m As Integer, n As Integer) As Integer
Dim c As Integer
c = 1
Do While c<= Min (len1 -m, len2 - n)
If Mid (s1, m+ c, 1) = Mid(s2,n+c,1) Then
Else
Exit Do 'Exit Do的作用是退出Do循环
End if
Loop
Search = c -1
End function
Private Sub Command1_Click()
s1 = Text1. Text
s2 = Text2. Text
len1 = Len (s1)
len2 = Len (s2)
maxlen = 0: maxstr = ""
Dim i As Integer, j As Integer, k As Integer
For i=1 To len1
For j=1 To len2
If Mid(s1, i, 1) = Mid(s2,j,1) Then
k = 'k用于记录连续公共子串的长度
If (k> maxlen) Then
maxlen = k
maxstr =
End if
End If
Next j
Next i
Labe13. Caption= "最长连续公共子串为:"& maxstr
Labe14. Cantion = "该子串长度是:"& str (maxlen)
End sub
Private Sub Command1_Click()
Const n = 100
Dim ss As String, t As String, i As Integer
Dim k As Integer, p As Integer, temp As Integer
Dim s(1 To n) As Integer, f(1 To n) As Integer
Dim num(1 To n) As Integer, flag(1 To n) As Boolean
ss = Text1.Text
starttime = 480: endtime = 720 '教室可以安排活动时间为8:00到12:00
k = 0: p = 0
For i = 1 To Len(ss)
ch = Mid(ss, i, 1)
If ch <> "," Then
t = t + ch
Else
p = (k - 1) \ 2 + 1
If k Mod 2 = 1 Then s(p) = convert(t) Else f(p) = convert(t)
t = ""
End If
Next i
For i = 1 To p
num(i) = i
Next i
For i = 1 To p
List1.AddItem Str(num(i)) + " " + ff(s(i)) + " " + ff(f(i))
Next i
For i = 1 To p - 1
For j = p To i + 1 Step -1
If Then
temp = num(j): num(j) = num(j - 1): num(j - 1) = temp
temp = s(j): s(j) = s(j - 1): s(j - 1) = temp
temp = f(j): f(j) = f(j - 1): f(j - 1) = temp
End If
Next j
Next i
For i = 1 To p
If s(i) >= starttime And f(i) <= endtime Then
flag(i) = True
End If
Next i
List2.AddItem "活动号 起始时间 结束时间"
For i = 1 To p
IfThen
List2.AddItem Str(num(i)) + " " + ff(s(i)) + " " + ff(f(i))
End If
Next i
End Sub
Function convert(s As String) As Integer
'把时间格式的s转换为整数,如"08:20"转化为500。代码略
End Function
Function ff(t As Integer) As String
'把整数t转换为时间格式,如500转化为"08:20"。代码略
End Function
For i=1 To 6
a(i) =Int(Rnd()*10)+1
If a(i) Mod 2=i Mod 2 Then i=i-1
Next i
For i=1 To 2
For j= 6 To i+2 Step -1
If a(j)>a(j-2) Then
t=a(j):a(j)=a(j-2):a(j-2)=t
End If
Next j
Next i
执行程序后,数组a各元素可能是( )
1 bmp
1 bmp属性截图 |
#程序段 1: from PIL import Image import numpy as np import matplotlib.pyplot as plt img=np.array(Image.open('1.bmp').convert("L")) rows,cols=img.shape#获取图像的行数和列数 for i in range(rows): for j in range(cols): if img[i,j]>128: img[i,j]=0 #设置为黑色 else: img[i,j]=1 #设置为白色 plt.figure("1.bmp") plt.imshow(img,cmap="gray") #以灰度模式显示 plt.axis("off") plt.show() |
说明:以上程序段1实现将1.bmp 以黑底白字显示
请根据以上信息回答下列问题:
A. rows,cols=img.shape B. for i in range(rows)
C. img[i,j],img[i,cols-j]=img[i,cols-j],img[i,j] D. plt.imshow(img,cmap="gray")
应该修改为:;
#程序段 2: from PIL import Image import numpy as np import matplotlib.pyplot as plt img=np.array(Image.open('1.bmp').convert("L")) rows,cols=img.shape for i in range(rows): for j in range(cols//2): img[i,j],img[i,cols-j]=img[i,cols-j],img[i,j] plt.figure("hh") plt.imshow(img,cmap="gray") plt.axis("off") plt.show() |
import random
n=int(input('请输入入栈元素的个数:'))
data=[i+1 for i in range(n)]
random.shuffle(data) #将序列的所有元素随机排序
s=''
for i in range(n):
s+=str(data[i])+'→'
print('随机产生的出栈序列为:'+ ) #去除最后多余的'→'
flag=True; i=0
while i<n-1 and flag:
①
for j in range(i+1,n):
if data[j]<data[i]:
if data[j]<x:
x=data[j]
else:
②
break
i+=1
if flag:
print('该出栈序列是可能的!')
else:
print('该出栈序列是不可能的!')
① ②