Dim goumai(1 To m * 10) As Integer
Dim i As Double,j As Integer,k As Integer,t As Integer
Dim fs As Integer,je As Integer,maxi as Integer,maxje As Integer,
maxzxa As Integer
p = Val(Text1.Text): n = Val(Text2.Text)
nc = 0
For i =1 To m
For j =1To sl(i)
nc = nc + 1:
Next j
Next i
For i =0 To 2^ nc - 1
t = i
For j =1 To nc
goumai(j) =
t = t \ 2
Next j
fs = 0: je = 0: zxa =0'初始化份数,金额,总喜爱度
For j =1To nc
fs = fs + goumai(j): je = je + dj(hh(j)) * goumai(j): zxa = zxa + xa(hh(j)) * goumai(j)
Next j
If fs = p And
Next i
'输出 maxi 对应的购买方案,代码略
If maxje >0Then List1.AddItem "剩余金额:" & CStr(n - maxje) & " 总喜爱度:" & CStr(maxzxa) Else List1.AddItem "钱太少"
A.k-1 f * a(n) < f * a(n + 1) | B.k-1 f * a(n) > f * a(n + 1) |
C.k-2 f * a(n) > f * a(n + 1) | D.k-2 f * a(n) < f * a(n + 1) |
图 a
图 b
Const n = 3
Dim a(1 To n * n) As Integer
Private Sub Command1_Click()
Dim mw(1 To 2*n*n) As Integer
‘存储密文数据,奇数位存储加密值,偶数位存储该数据在原文中的位置
Dim yw(1 To n*n) As Integer ‘存储解密数据
Dim k As Integer
‘生成规模为 n*n 的密钥矩阵存入数组 a 中,代码略
For i = 1 To Len(Text1.Text)
c = Mid(Text1.Text, i, 1)
If c <> "," Then
t = t * 10 + Val(c)
Else
mw(k) = Val(t): t = 0
End If
Next i
For i = 1 To k\2 ‘对密文解密,结果存数组 yw
yw(mw(2 * i)) =
Next i
s = ""
For i = 1 To k\2
s = s + Chr((yw(i)) + 64)
Next i
Text2.Text = s
col = (x - 1) Mod n + 1
row = (x - 1) \ n + 1
getmm = a((col - 1) * n + row)
If row Mod 2 = 0 Then getmm =
如上图所示的棋盘,需要选择第2行第2列、第4行第2列两颗棋子,按照规则进行翻转便可使得棋盘变为纯黑。现编写程序找出实现棋盘纯色所需翻转棋子次数最少的方案并输出所挑选棋子的个数,若无答案则输出“无法翻转为纯色”。
解决该问题的算法原理:棋盘翻转方案为0000000000000000~1111111111111111之间的某几种,即十进制数 0~65535,利用枚举算法在0~65535之间枚举,即可找到最优方案。假设被选翻转棋子状态用1表示被选中,0表示不选中。例如某方案的十进制为1028即 2^10+2^2,转化为一个16位的二进制串0000010000000100就表示该棋盘中的第2行第2列、第4行第2列这两个棋子及其上下左右被选中翻转,我们认为该方案选中两个棋子进行翻转。
程序运行界面如下图所示,请回答下列问题。
Dim flag As Boolean, i As Integer
图1旋转前
图2顺时针90°以后
图3
cnt=cnt+i
m=Int(Rnd()*(j-i+1))+i
If a(m) >Key Then j=m-1 Else i=m+1
A.cnt的值一定为4 | B.m的值一定为3 |
C.j的值可能为2 | D.i的值一定为4 |
A.-1 | B.0 | C.1 | D.-3 |
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
数量 | 12 | 3 | 9 | 6 | 6 | 9 | 3 | 12 |
箱号(方案1) | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 |
箱号(方案2) | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 |
箱号(方案3) | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 |
在上述情况下,有3种分箱方案,方案1为最优方案。
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
数量 | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 |
在上述情况下,没有符合要求的装箱方案。
按照上述要求,编写一个VB程序,功能如下:窗体加载时,读取流水线上每包口罩的数量,并将结果显示在列表框List1中,点击“装箱”按钮后,在文本框Text1中输出分箱结果,若存在装箱方案,则输出最多的装箱数,否则输出“无方案”。程序界面如图所示。
List1.clear
'读取流水线上口罩包数n和每包口罩数,存入数组a中,并在List1中显示,代码略
End SubDim s As String
Dim tot As Integer, ans As Integer, cur As Integer
For i = 1 To n
sum(i) = sum(i - 1) + a(i)
Next i
ans = 0
For i = 1 To n
cur = i '当前分箱最后一包口罩的序号
_____
pos = i + 1
Do While pos <= n
If find(pos, n, cur) Then '寻找下一段符合方案的口罩数量和
cur = pos
tot = tot + 1
Do While sum(pos) = sum(pos + 1) '若这包口罩数量为0则直接跳过
pos = pos + 1
cur = cur + 1
Loop
Else
Exit For
End If
pos = pos + 1
Loop
If tot > 1 And ____ Then
ans = tot
Exit For
End If
Next i
If ans > 0 Then
Text1.Text = Str(ans)
Else
Text1.Text = "无方案"
End If
End Sub
Function find(L As Integer, R As Integer, k As Integer) As Boolean
Dim m As Integer, t As Integer
find = False
Do While L <= R
m = (L + R) \ 2
t = _____
If t = sum(i) Then
pos = m
find = True
Exit Function
ElseIf t < sum(i) Then
L = m + 1
Else
R = m - 1
End If
Loop
End Function