乘以和移位数组元素

时间:2016-03-16 16:35:29

标签: java arrays for-loop indexing

我已经使用这个算法已有一段时间但我无法得到它。以下是需要发生的事情:

我有一个数组1(行不移位):S a; S b = +a; // instead of S c = std::move(a);

和数组2(将向左移动):.10 .15 .20 .30

我需要的算法如下。

.25 .30 .28 .11

然后:

  • 总计这些乘法的总和
  • 将底部数组索引1向左移动并将索引1中的元素粘贴到数组的背面,所以现在乘法将是

    .10 .15 .20 .30
    .25 .30 .28 .11
    
    multiply .10 * .25
    multiply .15 * .30
    multiply .20 * .28
    multiply .30 * .11
    
  • 重复乘法

  • 重复这些乘法的总和

这将一直持续到我们一直循环一次。

我的尝试:

.10 .15 .20 .30
.30 .28 .11 .25

2 个答案:

答案 0 :(得分:0)

据我所知(对性能有一些修正):

public static void main(String[] args) {
    double[] arr1 = {.10, .15, .20, .30};
    double[] arr2 = {.25, .30, .28, .11};

    double sum = 0;
    int count = 0;
    while (count < arr1.length) {
        int j = count;
        for (int i = 0; i < arr1.length; i++, j++) {
            if (j > arr1.length - 1) {
                j = 0;
            }
            sum += arr1[i] * arr2[j];
        }
        count++;
    }
    System.out.println(sum);
}

答案 1 :(得分:0)

这里有一些伪代码暗示你要使用工作算法(让我们float[] a1float[] a2):

在进入代码之前,让我们想象一下,不是改变a2中值的索引,而是将数组相互滑动:

.10 .15 .20 .30
        .25 .30 .28 .11
__2__↑   ↑-1-↑   ↑__2__

因此,我们可以计算部分12

的两个循环的乘法/和
double sum = 0;

//main loop, where i represents by how much you are shifting a2
for(int i = 0 ; i < a2.length ; i++) {

    //loop for part #1
    for(int j = i ; j < a2.length ; j++) {
        sum = sum + (a1[?] * a2[j]);
    }

    //loop for part #2
    for(int j = 0 ; j < i ; j++) {
        sum = sum + (a1[j] * a2[?]);
    }
}

在这里,我留下了一些逻辑让你弄明白,但一切都在那里