Java作业。查找五个连续数字的最大乘积

Java作业。查找五个连续数字的最大乘积,java,algorithm,Java,Algorithm,我们已经开始在学校学习Java,并且我们已经得到了一些家庭作业要做。我已经设法做到了五分之四,但最后一次真的很痛苦 基本上:编写一个程序,在1000个地方找到五个最大的乘积 连续数字 这是电话号码 你有什么办法解决这个问题吗 如果此说明不清楚,请通知我,并尝试再次向您解释。假设您所提供的大数字中的连续数字是5位 您将希望一次遍历数字1中的每一个字符,抓住其后的四位数字,找到产品。如果高于上一个产品,则存储它和5位数字组合,然后移动到下一位数字,直到处理完所有数字。假设连续,则表示提供的大数字中的

我们已经开始在学校学习Java,并且我们已经得到了一些家庭作业要做。我已经设法做到了五分之四,但最后一次真的很痛苦

基本上:编写一个程序,在1000个地方找到五个最大的乘积 连续数字

这是电话号码

你有什么办法解决这个问题吗


如果此说明不清楚,请通知我,并尝试再次向您解释。

假设您所提供的大数字中的连续数字是5位


您将希望一次遍历数字1中的每一个字符,抓住其后的四位数字,找到产品。如果高于上一个产品,则存储它和5位数字组合,然后移动到下一位数字,直到处理完所有数字。

假设连续,则表示提供的大数字中的5位


您将希望一次遍历数字1中的每一个字符,抓住其后的四位数字,找到产品。如果高于上一个产品,请将其和5位数字组合存储,然后移动到下一位数字,直到处理完所有数字。

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

  • 窗口以前5位数字开始
  • 将窗口中的5位数字相乘,并与当前最大值进行比较。如果较大,则更新当前最大值,如果要跟踪哪些数字仅用于检索该最大值,则可能还存储索引
  • 将窗口移动一位,然后从顶部开始

  • 一种可能的优化方法是,如果窗口包含零,则可以跳过第二步。更好的是,您可以立即移动窗口,直到零后面的第一个数字。

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

  • 窗口以前5位数字开始
  • 将窗口中的5位数字相乘,并与当前最大值进行比较。如果较大,则更新当前最大值,如果要跟踪哪些数字仅用于检索该最大值,则可能还存储索引
  • 将窗口移动一位,然后从顶部开始

  • 一种可能的优化方法是,如果窗口包含零,则可以跳过第二步。更好的是,您可以立即移动窗口,直到零后面的第一个数字。

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


    我不是为你写的。。。这是你的家庭作业;)

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


    我不是为你写的。。。这是你的家庭作业;)

    我认为优化算法应该是这样的:

    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

    6) 如果新的
    p
    大于旧的,则转至步骤3)

    您将乘法的数量减少了5倍,因为您不会继续将5个数字相乘,而是将2个数字相乘。


    请记住丢弃包含
    0
    的序列,并尝试沿着这些线优化算法。

    我认为优化算法如下所示:

    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

    6) 如果新的
    p
    大于旧的,则转至步骤3)

    您将乘法的数量减少了5倍,因为您不会继续将5个数字相乘,而是将2个数字相乘。


    请记住丢弃包含
    0
    的序列,并尝试沿着这些线优化算法。

    您遇到的问题是哪一部分?你能用一个较小的数字来计算吗?你的意思是你应该先计算5的第一个块,然后再计算第二个块,然后。。。或者试着从第一个数字开始,然后是第二个数字等等?你能告诉我们更多关于你陷入困境的地方吗?我们可以做一个