我遇到了这个问题here。这是今年早些时候举行的编程竞赛
以下是摘要:
给定N个整数的数组,找到所有连续M个整数的LCM
对于例如
Array = [3,5,6,4,8] (hence N = 5)
M = 3
输出:
LCM(3,5,6) = 30
LCM(5,6,4) = 60
LCM(6,4,8) = 24
实际上有一个解决方案草图here,但我无法理解动态编程部分。
因此,如果有人可以通过一些例子详细阐述相同的解决方案,那将会很棒
一个新的,易于理解的解决方案也将受到赞赏。
答案 0 :(得分:0)
我无法再访问解决方案(可能链接已损坏?),但这是我要做的: 我希望我的程序像金字塔一样工作。在最下面的一行,我会得到具有给定数字的数组。在上面的每一行上,我将有一个数组,其中一个字段小于下面的数组。它将存储来自下面数组的两个值的LCM。
[ 30 ]
[ 15, 30 ]
[3, 5, 6]
通过这种方式,您可以使用递归函数,并且必须构建金字塔的M-1层。这是一个伪代码实现:
rekursivePyramid (Integer[] numbers, Integer height) {
if (height == 0) return numbers;
else {
newNumbers = Integer[numbers.size() - 1];
for (i=0; i<newNumbers.size(); i++) {
newNumbers[i] = LCM ( numbers[i], numbers[i+1]);
}
return rekursivePyramid( newNumbers, height-1);
}
}
这将为您提供一个数组,您可以在其中找到第一个字段中前M个数字的最小公倍数,第二个字段中第二个到第M个第一个数字的LCM,等等。