level 15
你能不能先说一下你想干啥,这个标题实在是让人看不懂啊
2023年02月26日 10点02分
2
就是1 2 3 三个数字 当一位时是三种结果1 2 3 两位是11 22 33 12 23 以此类推直到16位停止(刚看到d=1这个没弄,这个应该也不影响运行,主要是程序循环了)
2023年02月27日 07点02分
level 2
更改代码:
解释代码
首先对高位进行累加
当高位累加到3时,高位重新变成1,副高位累加一次1
依次类推
此变化可以看作为3进制
对于(3^a)^n :a在这里表示要累加的位数,如何计算a
方法1,首先确定穷举位数b,和运行次数c ,待累加一次的穷举任意数d。for i = 1 to b d = d+10^(b-c \ 3^i-1) :if val(mid(d,b-c \ 3^i-1,1))=3 then d = d-10^(b-c \ 3^i-1)*2
依方法1,可得代码:
for b = 1 to 16
c = 1
e = "1111111111111111"
d = val(mid(e,1,b))
for f = 1 to 3 ^ b
for i = 1 to b
d = d+10^(b-c \ 3^i-1)
if val(mid(d,b-c \ 3^i-1,1))=4 then d = d-10^(b-c \ 3^i-1)*3
list1.additem str(d)
next i
c = c + 1
next f
next b
2023年02月27日 07点02分
3
穷举不是这么干的,这里让你穷举数字,那下次万一穷举汉字你怎么办
2023年02月27日 07点02分
level 1
'递归算法,LastTime:=剩余递归次数,Str:=递归结果
Sub Recurrence(LastTime As Integer, Optional Result As String)
If LastTime = 0 Then List1.AddItem Result: Exit Sub '递归次数为零时输出结果
For i = 1 To 3
Recurrence LastTime - 1, Result & i '剩余次数减一,向下递归
Next
End Sub
Private Sub Command1_Click()
Recurrence 16 '递归16次,(会很卡,注意)
End Sub
2023年02月27日 07点02分
4
level 9
你这循环的条件是b<>3*a,然后b和a都在变,你可以先预想一下什么时候b=3*a,或者打印b,a来监控一下。
至于list没更新,是因为你循环不释放资源,list就没有机会更新。
通常这里需要加个doevents来释放系统资源。
2023年02月27日 08点02分
5
level 15
既然你都提到3进制了,那么代码完全可以这样写,算法就是十进制转3进制,转换之后每位数都加1即可:
For i = 1 To 16 '数字位数
For j = 0 To 3 ^ i - 1 '数字范围
s = ""
t = i
For k = 1 To i '需要多少位就转多少位,前导0不省略
s = t Mod 3 + 1 & s '除以3的余数是0~2,这里加上1就变成1~3了
t = t \ 3
Next k
List1.AddItem s
Next j
Next i
2023年02月27日 11点02分
6
t=i应该改成t=j
2023年02月27日 11点02分