首先在这里发帖,因为我遇到了一个让我难过的问题。我正在为uni的一个项目创建一个计算工具,现在我不是它的学位,但是对于这个项目我到目前为止还没有遇到过问题。
基本上我正在为建筑物进行设计工作,建筑物的每个楼层都可以分配9种可能的设计中的一种。然后分配解决方案,然后计算成本,我试图找到最有效的组合。
通常我会使用一些嵌套循环来找到最好的设计,没有问题,但对于计算工具我需要更改楼层数,因此需要更改嵌套循环的数量,我不熟悉如何做。
一般结构是这个
1- X楼层数。
每个楼层都有可能的设计。根据每个组合,必须计算成本,如果它在最佳的5个结果中,则将被存储。
总共有9 ^ x个解决方案。
所以
Floor = 1
For Solution = 1 to 9
Floor = 2
For Solution = 1 to 9
CalculateCost()
if CalculateCost < Best Then
Write, Floor1 Solution Value, Floor2 Solution Value to Output
等等...
现在我正在使用Vb.net,并且不知道如何进行递归。如果有人可以简单地指出我可以帮助我解决这个问题的资源,我将非常感激。
编辑 - 虽然我试图简化,但设计实施的成本会根据各种其他因素而变化,因此我不能简单地为所有设计采用最便宜的设计。我试图通过实践理论来解决这个问题,到目前为止已经找到了解决方案,因此需要强力方法
答案 0 :(得分:0)
您已经使用For
循环为每个给定的楼层尝试每个解决方案,但您需要手动迭代Floor
变量。您似乎有9个独立声明的变量,其模式为FloorX Solution Value
。鉴于所有这些,我认为你真正需要的是dynamic array。这是使用这种方法的一些粗略代码:
Dim FloorSolutionValues() As Byte ' I'm assuming values of 1-9
Dim NumberOfFloors As Integer ' Get this from the user
ReDim FloorSolutionValues(NumberOfFloors - 1)
For CurrentFloor As Integer = 0 To NumberOfFloors - 1
For CurrentSolution As Byte = 1 To 9
If CalculateCost() < FloorSolutionValues(CurrentFloor) Then
FloorSolutionValues(CurrentFloor) = CurrentSolution
End If
Next
Next
我做了一些可能会或可能不是真的假设,但这应该让你走上正确的道路。