我有一個包含數百個(複數)元素的數組。我需要一種將每三個元素相乘並添加到下一批倍數的方法。什麼是最有效的方式來做到這一點?元素乘法 - 每三個元素
例如;
(myArr[0]*myArr[1]*myArr[2])+(myArr[3]*myArr[4]*myArr[5]*)+(myArr[6]*...myArr[n])
也許這可以很容易地完成,但我失去了一些東西。在此先感謝
我有一個包含數百個(複數)元素的數組。我需要一種將每三個元素相乘並添加到下一批倍數的方法。什麼是最有效的方式來做到這一點?元素乘法 - 每三個元素
例如;
(myArr[0]*myArr[1]*myArr[2])+(myArr[3]*myArr[4]*myArr[5]*)+(myArr[6]*...myArr[n])
也許這可以很容易地完成,但我失去了一些東西。在此先感謝
假設數組的大小爲3 ... 此代碼的工作多...
long long int Ans=0;
for(int i=0;i<size; i+=3)
{
Ans += (arr[i]*arr[i+1]*arr[i+2]);
}
如果你對乘法的數量非常嚴重...... 這可能是有幫助..
long long int Ans=0;
for(int i=0;i<size; i+=3)
{
if(arr[i] && arr[i+1] && arr[i+2])//check if anyone of them is zero..
Ans += (arr[i]*arr[i+1]*arr[i+2]);
}
如果大小不是3
的倍數,則附加在末端少的元件,從而使它的3的倍數,以及與1
初始化它們(或0
取決於你的規格..)並使用上述相同的方法。
編輯:
您需要添加for
環以上這個片段。
while(size%3!=0)
{
arr[size++] = 0; //or 1
}
感謝您的相當響應。但是,它不是三的倍數,這就是爲什麼我正在努力想辦法循環它。 – user2550888
@ user2550888相應地更新了答案.. :) – nitish712
測試'我
我可以建議使用所謂的循環嗎? – PlasmaHH
高效的是什麼意思? –
就速度而言(但我稍後會在CUDA中並行化代碼 - 所以不是那麼重要的atm)。數組的大小可以改變,因爲數組來自代碼的另一部分,並且它不一定是三的倍數,這就是爲什麼我無法繞過循環的原因。任何幫助表示讚賞 – user2550888