我正在处理一个问题,试图制作一种递归方法来测试所有可能的组合并向我展示“最便宜”的组合。
任务是:
- 我有一个 Array[n] 数字,它是动态分配和填充的。{1, 3, 4, 2} 例如。数组定义为
int *array;
- 我喜欢数组的大小并放入变量 Size。
- 数组中的每 2 个数字表示一个段的顶部和底部,因此在这种情况下,数组有 3 个段。这些段是:A = 1 3 ,B = 3 4 ,C = 4 2 。
- 我必须按照他们的顺序加入他们。我可以从最后两个开始加入到第一个,或者我可以从中心到两侧开始,但我必须选择“最便宜”的方式。
- 每次我加入两个段: A = 1 3 和 B = 3 4 。我这样计算它的成本:(1 * 4) + 3。我将段末端的数字相乘,然后将总和与段之间的数字相乘。
- 输入将始终是 2 个或更多段,表示数组中的 3 个或更多数字。
实际上我需要它做的是:
For two segments: array= "1 2 3"
A={1,2},B={2,3} ---- (1*3)+2 -> Cost = 5
For three segments: array= "30 20 25 10"
A={30,20},B={20,25},C={25,10} ----
case1 - [(30*25)+20] + [(30*10)+25] -> Cost = 1095
case2 - [(20*10)+25] + [(30*10)+20] /> Cost = 545
所以我们可以清楚地看到第二个成本更好,所以我们返回那个值。对于更多的段,计算的数量将急剧增加,但这对于我的需要来说是可以的。
我已经以不同的方式尝试了很多次,但我对所有的指针都感到困惑,而且我对递归函数也不擅长。我不知道我是否足够具体,如果有不清楚的地方,我会很乐意解释。
我当然不需要整个代码,也许会得到一些解释或关于如何做到这一点的想法:)