我们已经开始在学校学习Java,我们已经做了一些家庭作业。我已经成功完成了5分中的4分,但最后一分是真正的痛苦。
基本上:编写一个程序,找到(在1000个长数字中)最大的五个乘积 连续数字。
这是数字http://pastebin.com/PFgL6jcM
你有什么想法如何解决这个问题?
如果这是不明确的说明,请通知我,并会再次向您解释。
答案 0 :(得分:5)
最天真的方法是在数字上使用一种“滑动窗口”。窗口大小为5,您可以跟踪最大数量:
可以立即想到的一种可能的优化是,如果窗口包含零,则可以跳过第二步。更好的是,您可以立即将窗口移动到零后面的第一个数字。
答案 1 :(得分:4)
我会说优化算法看起来像这样:
1)抓住前五个数字
2)如果当前集合包含0
,请抓取0
之后的前五个数字。这样做直到您到达不包含0
的集合。 (如果所有集合都包含0
- 不太可能 - 返回0
)。
3)计算5个数字(x1
,x2
,x3
,x4
,x5
)的乘积,如下所示:
p1 = x5 * x4
p2 = x3 * p1
p3 = x2 * p2
p = x1 * p3
4)如果p
大于之前的p
,请将其存储。
5)丢弃第一个数字并添加下一个数字(x6
)。
p = x6 * p3
6)如果新p
大于旧0
,请转到步骤3)
您将乘法次数减少了5倍,因为您不会将5个数字相乘,而是2。
请记住丢弃包含{{1}}的序列,并尝试沿这些行优化算法。
答案 2 :(得分:1)
假设连续,你的意思是你提供的大数字中的5位数。
您需要一次遍历第一个中的每个字符,然后抓住后面的四个数字,找到产品。如果它高于上一个产品,则存储它和5位数组合,然后移动到下一个数字,直到您处理完所有数字。
答案 3 :(得分:-1)
我不是为你写的......这是你的作业;)