2

假设输入数组的元素按升序排列,如下例所示:

int[] a= {23,24,25,30,34,36,40,41,43,45,50};

我需要将数组拆分为不同的子数组。每个子数组将包含元素,使得它们的总和小于或等于 100。

对于上述输入,我的输出应该是:

b1[]= {23,24,25};

b2[]= {30,34,36};

b3[]= {40,41};

b4[]= {43,45};

b5[]= {50};

输入数组中元素的值和数量可能会有所不同。

我对 Java 很陌生,我完全被卡住了。请建议我继续进行的方法。

4

2 回答 2

1

如果数字的顺序很重要,你可以这样写(这段代码只打印太阳数组)

int sum = 0;
for(int i=0;i<a.length;i++){
   if(sum + a[i] <= 100){
       sum += a[i];
       System.out.print(a[i]+" ");
   }else{
       sum = 0;
       System.out.println("");
   }
}
于 2012-10-05T20:11:25.413 回答
1

我将为您提供一些有关如何执行此操作的想法,并将编码留给您。如果您对实现的特定部分有疑问,请随时提问。

您必须在这里做的第一件事是创建一个存储子数组的地方。由于您不知道最终会得到多少个子数组,因此像 a 这样的动态List将是一个不错的选择,但如果您还没有了解这些,那么大数组也可以完成这项工作。

大阵列应该多长?嗯,每个子数组都小于 100,对吧?您可以将输入中的所有元素相加并除以 100 以获得估计值。

完成初始设置后,您需要弄清楚如何将输入数组拆分为子数组。你知道子数组的规则是“小于 100”,所以你必须做一些加法。

一个一个地查看输入元素。它们中的每一个都必须以一个子数组结尾;唯一的问题是何时停止一个子阵列并开始下一个子阵列。因此,如果添加下一个输入数字会使您的子数组总数超过 100,请将当前子数组存储在大数组中,并将该输入放入一个全新的子数组中。

当然,将之前添加的一堆数字加起来是浪费时间。您可以在旁边保留一个单独的变量来存储当前子数组的总数,这样您就不必为每个输入添加当前子数组上的所有元素。请记住在创建新子数组时将该变量重新设置为 0!

最后,您可能会用完子阵列或大阵列中的空间。如果发生这种情况,只需创建一个两倍大的新值并将当前值复制进去。

于 2012-10-05T21:21:01.503 回答