我已经使用这个算法已有一段时间但我无法得到它。以下是需要发生的事情:
我有一个数组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
答案 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[] a1
和float[] a2
):
在进入代码之前,让我们想象一下,不是改变a2
中值的索引,而是将数组相互滑动:
.10 .15 .20 .30
.25 .30 .28 .11
__2__↑ ↑-1-↑ ↑__2__
因此,我们可以计算部分1
和2
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[?]);
}
}
在这里,我留下了一些逻辑让你弄明白,但一切都在那里