0

这是我的一门课程作业中的编程问题。我已经有几年没有编程了,而且我一开始也不是很好。我目前正在阅读教程以恢复速度,但这需要一些时间。如果你们能帮我解决这个问题,我将不胜感激。

约束:

这个序列的每一项都是一个形式为 的正整数,对于所有具有 2^i*3^j*5^k的非负整数i, j, and ki + j + k >= 1.

不能使用数组。解决这个问题的算法必须涉及列表的重复创建和合并。具体来说5 lists; a final list, temp list, and three term lists

“最终列表通过与当前临时列表合并而增长。临时列表又被三个术语列表的合并所取代。新术语列表是通过将新临时列表乘以2, 3, and 5 respectively

所需的顺序如下:2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, . . .

4

1 回答 1

1

正如您在问题中所解释的那样,您可能会递归地执行您的算法。

在第 n 步:

最终列表将代表集合F(n) = {m | m = 2^i*3^j*5^k, 1<=i+j+k<=n}

临时列表将代表集合T(n) = {m | m = 2^i*3^j*5^k, i+j+k=n}

然后,“L2”术语列表将是L2(n) = 2*T(n-1)

“L3”术语列表将是L3(n) = 3*T(n-1)

“L5”术语列表将是L5(n) = 5*T(n-1)

为了得到 T,T(n) = merge(L2(n), L3(n), L5(n))

为了得到 F,F(n) = merge(F(n-1), T(n))

一旦你有了这个,你必须实现一个函数来合并 2 个列表。在 main 函数中,您只需将它们翻译成 Java。

您还可以使列表始终排序,以便合并简单高效!在 java 中,我认为您可以使用 LinkedList 或 ArrayList,两者都可以正常工作。

毕竟,这是你的功课。

于 2012-09-04T16:36:23.740 回答