N阶幻方的构造方法有很多种,下面是“右上方填数法”的算法:
⑴将1放在第一行中间一列;
⑵2~n2依次填在上一个数的右上方位置(即行减1列加1):
若上一个数的行数为1时,则当前数的行数为n;
若上一个数的列数为n时,则当前数的列数为1。
⑶如果按上面规则确定的位置上已有数,则把当前数放在上一个数的下面。
例如当n为3时,如图a所示,1在第1行第2列,则2的位置为第3行第3列;
再如3在第2行第1列,则4的位置应为第1行第2列,但该位置已有数,因此4就放在3所在位置的正下面。
“左上方填数法”的方法类似于“右上方填数法”,以3阶幻方为例,“右上方填数法”和“左上方填数法”所构造的幻方如下图a、图b所示。
|
|
图a 右上方填数法 | 图b 左上方填数法 |
小明采用“左上方填数法”的方法设计了如下程序。
Private Sub Command1_Click()
Dim a(1 To 100) As Integer
Dimx As Integer,y As Integer,x1 As Integer,y1 As Integer
Dim n As Integer, s As Integer,pos As Integer, st As String
n = Val(Text1.Text)
For i = 1 To n * n
a(i) = 0
Next i
s = 1
x = 1
y = (n + 1) \ 2
a(y) = s
Do While ①
s = s + 1
x1 = x: y1 = y
x = x - 1
y = y - 1
If x < 1 Then x = n
If y < 1 Then y = n
If a((x - 1) * n + y) > 0 Then ② : y = y1
③
a(pos) = s
Loop
st = ""
For i = 1 To n * n
st = st + wid(a(i))
If i Mod n = 0 Then
List1.AddItem st
st = ""
End If
Next i
End Sub
'自定义函数wid的功能是使数字在方阵对齐
Function wid(p As Integer) As String
'代码省略
End Function
请回答下列问题:
① ② ③
1 |
2 |
3 |
4 |
5 |
6 |
…… |
2n-1 |
2n |
性别 |
身高 |
性别 |
身高 |
性别 |
身高 |
…… |
性别 |
身高 |
该 n位学生站成一排合影:男生全部在一侧,从低到高排序;女生全部在另一侧,从高到低排(所有人的身高h为整数,且100≤h≤200),排序前显示于List1,排序后显示于List2,如图所示。
实现上述功能的VB程序如下,请回答下列问题。
Const n = 10
Dim a(1 To 2 * n) As String Private Sub Form_Load()
'读取身高和性别数据,存储在数组a中,并显示于列表框List1中,代码略
End Sub
Private Sub Comd1_Click()
Dim count As Integer, i As Integer, j As Integer count=0
For i = 1 To n-1
‘改错①
For j = n To i+ 1 Step -1
If a(2 * j - 1) = "男" Then If
Then ‘改错②
t = a(2 * j - 2): a(2 * j - 2) = a(2 * j): a(2 * j) = t
t = a(2 * j - 3): a(2 * j - 3) = a(2 * j - 1): a(2 * j - 1) = t start = j
End If
ElseIf a(2 * j - 3) = "女" Then
If Then '填空
t = a(2 * j - 2): a(2 * j - 2) = a(2 * j): a(2 * j) = t
t = a(2 * j - 3): a(2 * j - 3) = a(2 * j - 1): a(2 * j - 1) = t start = j
End If
End If
Next j i=start-1
count=count+1 Next i
For i = 1 To n
List2.AddItem a(2 * i - 1) + a(2 * i) Next i
End Sub
① ②
1)从前往后以8个二进制数据为一段,将n个待加密二进制数据依次分割成若干个数据段。剩余数据(个数小于8)为一个独立数据段。
2)对于数据个数等于8的每个数据段,分别作以下的位置调整,从第1个位置开始,从1开始数数,数到m时取出该位数字(取出位置的数字不参与下次计数),从下一个位置开始,继续从1开始数数,数到m时取出该位数字(当数到这8位二进制数的第8个位置后回到第1个位置继续计数),重复上述操作,直至这8位二进制数的各个数字被取完。然后,依次把取出的8位数字拼接成新的二进制数。得到加密数据段。对于数据个数小于8的数据段逆序重排,得到加密数据段。
3)依次合并加密数据段,即为最后的加密数据。
编写一个VB程序,实现功能如下:程序运行时从文本框Text1中读入一个二进制数,从文本框Text2中读入整数m,单击“加密”按钮1,对输入的二进制数按上述方法转换后在文本框Text3中显示。程序运行界面如图所示。
Private Sub Command_ Click ( )
Dim a (1 To 100)As String, f (1 To 8) As Integer
Dim m As Integer, s As String, k As Integer
Dim i As Integer, As Integer, p As Integer
s = Text1 Text: m = Val (Text2 Text)
n = Len (s)
For i=1 To 8
f(i) = ①
Next i
p = 0
For i =1 To 8
j = 1
Do While < = m
②
If f(p) = 1 Then j = j+1
Loop
f(p) = 0
For k= 1 To n \8
③
Next k
Next i
For i = (n \8) * 8 + 1 To n
④
Next i
For i= 1 To n
Text3. Text = Text3. Text + a(i)
Next i
End sub
① ② ③ ④
s1=Text. 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
要使程序实现上述功能,则方框中的代码是( )。
请回答下列问题:
Const n = 6
Dim a(1 To n * n) As Integer
Private Sub Form_Load() '产生 n * n 个数组元素,每行按n个数显示在 list1 中
For i = 1 To n * n
a(i) = Int(Rnd * 90) + 10
s = s + Str(a(i))
If ① Then
List1.AddItem s
s = “”
End if
Next i
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, w As Integer, s As String
For i = 1 To n * n
k = i
For j = k + n To ②
If a(k) > a(j) Then k = j
Next j
If a(k)=a(i) Then t = a(k): a(k) = a(i): a(i) = t
Next i
‘将排序后数组 a 的元素,按每行 n 个数显示在 list2 中,代码略
End Sub
① ②
Function f(x As Integer) As Single
f=Abs(x)
End Function
该函数返回值的数据类型是( )
s="67.153.47.211"
n = Len(s)
ch=”":cmax= ""
For i= 1 Ton
c=Mid(s,n-i+1,1)
If c>="0" And c<="9" Then
ch=ch+c
Else
If ch> cmax Then cmax = ch
ch=""
End If
Next i
Text1.Text = cmax
执行该程序段后,文本框Text1中显示的内容是( )
⑴把该整数的数字顺序颠倒,求得该数的逆序数;
⑵将该整数和其对应的逆序数相加;
⑶若相加结果不是回数,则将结果作为新的整数,返回步骤⑴。
小林按照上述算法,设计了验证回数猜想的VB程序(猜想次数不超过10次),程序功能如下:在文本框Text1中输入一个正整数,单击“验证”按钮(Command1),获取文本框Text1中的数,当该数不是回数时,采用回数猜想的方法进行验证,并在列表框List1中输出每次验证的过程,若验证成功或验证次数超过10次,则停止验证,最后在列表框List1中输出验证结果。程序运行效果如图所示。
实现上述功能的VB程序如下:
Private Sub Command1_Click()
Dim t As String, a As Long, b As Long
Dim count As Integer ‘count用于存储回数猜想的验证次数
t = Text1.Text
count = 1
Do While Check(t) = False And count <= 10
a = Val(t)
①
c = a + b
List1.AddItem Str(a) & " +" & Str(b) & " =" & Str(c)
count = count + 1
t = c
Loop
If Check(t) Then
List1.AddItem "验证成功!"
Else
List1.AddItem "10次内未验证成功!"
End If
End Sub
' 自定义函数Turn
Function Turn(x As String) As Long
Dim s As String, i As Integer
s = ""
For i = Len(x) To 1 Step -1
s = s & Mid(x, i, 1)
Next i
Turn = ②
End Function
‘自定义函数Check,检查x是否为回文数
Function Check(x As String) As Boolean
Dim i As Integer
Check = True
For i = 1 To Len(x) \ 2 Step 1
If Mid(x, i, 1) <> ③ Then Check = False mid(x,len(x)+1-i,1)
Next i
End Function
① ② ③
list= [34,22,101,8,14,88,24,17,54,7]
num=list[0] for i in range(1, 10):
if list[i]<num:
num=list[i]
print(num)
当程序运行结束时,输出的值是( )
Dim i As Integer,j As Integer,k As String,n As Integer
n=3
List1.Clear
For i=1 To n
k=“”
For j=1 To i
k=k+“*”
Next j
List1.AddItem k
Next i
该程序运行中,在列表框List1中显示的是( )
实现此功能的VB程序段如下,已知程序中两处标记①的位置表达式相同,程序中①、②两处表达式为( )
Dim a(1 To 100) As Sting
For i= 1 To 10
For j=1 To 10
If i=j Or i Mod 10=0 Or i Mod 10= 1
Then
a( ① )="●"
Else
a( ① )="○"
EndIf
Next j
Next i
For i= 1 To 100
s=s+ a(i)
If ② Then
List1.Addltem s
End If
Next i
k=int(input("输入一个四位数:"))
x=
y=k%100
if :
print("符合")
else:
print("不符合")
FOR A=5 TO 1
S=S+A
NEXT A
PRINT S
该程序的运行结果是( )
编写VB程序统计所有的峰值(peak)、峰值数量(count)和最高点(high)。
实现上述功能的VB程序如下,请回答下列问题:
Const n = 20
Dim a(1 To n) As Integer
Private Sub Form_ Load( )
'随机生成n个数,存储于数组a中,并输出在List1中。代码略。
End Sub
Private Sub Command1_ Click( )
Dim count As Integer
Dim high As Integer
Dim peak As Integer
Dim i As Integer, j As Integer
count= 0
if a(1)> a(2) then
count = 1
high=-1
i=1
Do While i< n-1
j=i+1
If a(j)>a (j-1) Then
Do While a(j)>a(j-1)
j=j+1
Loop
count =count+1
'①
List2. AddItem“第”+Str(count) +“个峰值:”+ Str( peak)
If peak > high Then high = peak
'②
Else
i =i+1
End If
Loop
List2. AddItem“共有:”+Str(count) +“个峰值”
List2. AddItem“最高点是:”+Str( high)
End if
End Sub