Java中的家庭作业。找到连续五位数的最大乘积

时间:2012-01-04 21:05:28

标签: java algorithm

我们已经开始在学校学习Java,我们已经做了一些家庭作业。我已经成功完成了5分中的4分,但最后一分是真正的痛苦。

基本上:编写一个程序,找到(在1000个长数字中)最大的五个乘积 连续数字。

这是数字http://pastebin.com/PFgL6jcM

你有什么想法如何解决这个问题?

如果这是不明确的说明,请通知我,并会再次向您解释。

4 个答案:

答案 0 :(得分:5)

最天真的方法是在数字上使用一种“滑动窗口”。窗口大小为5,您可以跟踪最大数量:

  1. 窗口以前5位数字开头
  2. 将窗口中的5位数相乘,并与当前最大值进行比较。如果更大,则更新当前最大值,如果要跟踪哪些数字只是检索最大值,则可能存储索引
  3. 将窗口移动一位并从顶部开始
  4. 可以立即想到的一种可能的优化是,如果窗口包含零,则可以跳过第二步。更好的是,您可以立即将窗口移动到零后面的第一个数字。

答案 1 :(得分:4)

我会说优化算法看起来像这样:

1)抓住前五个数字

2)如果当前集合包含0,请抓取0之后的前五个数字。这样做直到您到达不包含0的集合。 (如果所有集合都包含0 - 不太可能 - 返回0)。

3)计算5个数字(x1x2x3x4x5)的乘积,如下所示:

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)

  • 将数字转换为字符串;
  • 将String转换为字符数组;
  • 将字符数组转换为整数数组;
  • 将值设置为0;
  • 循环每个整数,直到第5个到最后一个字符;
  • (循环中)将该整数与数组中接下来的4个整数相乘;
  • (循环中)如果结果大于您所持有的值,则将其替换为5个数字的乘积;
  • (循环结束)

    我不是为你写的......这是你的作业;)