能否用vba穷举开关 是否,看能否使原数在左右列里的加减乘除得到与最终输出左和最终输出右结果相同
开关,左,右
否,NAN,+10
否,NAN,-60
否,-60,+80
是,-20,NAN
否,*2,-20
否*2,+60
否,-10,*2
是,*2,NAN
遍历处理开关为“是的行”,就可以得出左、右结果
Python 代码
#!/sur/bin/nve python
# coding: utf-8
num = 240
s = '''开关,左,右
否,NAN,+10
否,NAN,-60
否,-60,+80
是,-20,NAN
否,*2,-20
否*2,+60
否,-10,*2
是,*2,NAN'''
s_yes = [i.split(',')[1:] for i in s.split('\n') if i[0] == '是']
print('\n开关“是”的数据:\n', s_yes)
left = right = num
for i in s_yes:
l, r = i
left = left if l == 'NAN' else eval(f"{left}{l}")
right = right if r == 'NAN' else right+eval(f"{right}{r}")
print(f"\n原数:{num};左 -> {left},右 -> {right}")
代码运行效果截屏图片
【以下回答由 GPT 生成】
为了解决这个问题,我们需要从使用VBA编写一个函数开始,这个函数将会接收原始数值作为参数,并通过左列和右列的加减乘除操作得到最终输出左和最终输出右结果相同的解法。
下面是一个基本的VBA函数的框架,用于处理这个问题:
Function FindExhaustiveSolutions(value As Double) As String
' 实现代码
' 返回结果
FindExhaustiveSolutions = "结果"
End Function
然后,我们可以在这个函数中使用循环来进行穷举计算。下面是一个简单的示例,展示了如何在VBA中实现穷举解法:
Function FindExhaustiveSolutions(value As Double) As String
Dim leftResult As Double
Dim rightResult As Double
Dim i As Double, j As Double
For i = 1 To 100 ' 循环从1到100
For j = 1 To 100 ' 循环从1到100
' 计算左右列的加减乘除操作
leftResult = i + j
rightResult = i * j
' 检查结果是否相同
If leftResult = rightResult Then
' 如果结果相同,返回解法
FindExhaustiveSolutions = "原始值为 " & CStr(value) & ",解法为 " & CStr(i) & "和" & CStr(j)
Exit Function ' 返回找到的第一个解法
End If
Next j
Next i
' 如果没有找到解法,返回提示信息
FindExhaustiveSolutions = "未找到解法"
End Function
这个示例中的穷举解法是通过两个嵌套的循环来实现的。每次循环,我们计算左列和右列的加减乘除操作,并比较它们的结果是否相同。如果找到了解法,函数将返回解法信息。如果循环结束后仍然没有找到解法,函数将返回一个提示信息。
你可以将这个函数放在VBA宏中,然后在Excel中调用宏来解决问题。例如,你可以在一个单元格中输入函数调用表达式,比如=FindExhaustiveSolutions(10)
,然后按下Enter键执行函数并显示结果。
希望这些提示可以帮助你使用VBA语言编写代码解决穷举问题。如果有任何进一步的问题,请随时提问。
【相关推荐】
前几天写过一个函数正好可以解决这个问题
vba参考,https://blog.csdn.net/hhhhh_51/article/details/132676668