【问题标题】:Condense Array to Number将数组压缩为数字
【发布时间】:2019-10-17 22:11:58
【问题描述】:

我正在尝试为我的家庭作业解决一个问题,但我卡住了。

这是任务:

编写一个程序来读取一个整数数组,并通过对相邻的元素求和来压缩它们,直到获得一个整数。例如,如果我们有 3 个元素 {2, 10, 3},我们将前两个元素和后两个元素相加得到 {2+10, 10+3} = {12, 13},然后我们再次将所有相邻的元素相加元素并获得 {12+13} = {25}。

这是我到目前为止所做的,但我卡住了,不知道如何继续。

for (int i = 0; i < arr.length; i++) {
    arr[i] = Integer.parseInt(input[i]);
}

int sum = 0;
int[] condensed = new int [arr.length-1];
System.out.println(condensed.length);

while (condensed.length > 1) {
    for (int i = 0; i < condensed.length; i++) {
        condensed[i] = arr[i] + arr[i+1];
    }   
}

if (condensed.length == 1) {
    sum = condensed[0] + condensed[1];
    System.out.println(sum);
}

输入是“5 0 4 1 2”,输出应该是“35”,但我得到的是“4”。

【问题讨论】:

  • 令我惊讶的是,您的代码居然完成了。 condensed.length 上的 while 循环永远不应该终止!所以请阅读minimal reproducible example 并相应地增强您的问题。请也修复损坏的格式!
  • 对此我很抱歉。这是我的第一个问题。
  • 你得到的 result 来自System.out.println(condensed.length),其余的永远不会结束(正如 GhostCat 已经解释的那样)
  • 对于{2, 10, 3},答案是25 = 1*2 + 2*10 + 1*3;对于{5, 0, 4, 1, 2},答案是35 = 1*5 + 4*0 + 6*4 + 4*1 + 1*2。这是否建议了一种计算结果的方法?

标签: java arrays for-loop while-loop


【解决方案1】:

鉴于您已经从输入中获得了数组 (int arr[]) 或数字转换器,您可以连续循环从第一个元素到最后一个元素之前的数组,将该值添加到下一个值并将它们存储在一个临时数组。

然后,您将用临时数组替换值数组并继续该过程,直到数组的长度等于 1。

while (arr.length > 1) {
    int temp[] = new int[arr.length - 1];  

    for (int i = 0; i < arr.length - 1; i++) {
        temp[i] = arr[i] + arr[i + 1];
    }

    arr = temp;
}

【讨论】:

  • 感谢您的回答和编辑我上面的问题。这行得通,我可以理解为什么以及为什么它不适用于我的代码!
【解决方案2】:

我已经写了一个示例代码,如果您遇到问题可以扩展,请告诉我:

        int[] a1 = new int[] {2, 10 , 3};
        int[] a2 = new int[2];
        int[] a3 = new int[1];

        for(int i = 0; i < a1.length - 1; i++)
            a2[i] = a1[i] + a1[i + 1];

        for(int i = 0; i < a2.length - 1; i++)
            a3[i] = a2[i] + a2[i + 1];

        System.out.println(a3[0]);

通常你会生成 N 个 int 数组 (N = arr.length - 1) 并用循环填充它们

【讨论】:

  • 如果条目包含 4 个(或更多)元素怎么办?
  • 我应该扩展我在编写时提供的代码,但如果需要我可以使用 Lists 对其进行修改,但我认为太多了
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多