2013-07-10 108 views
0

我有一個包含數百個(複數)元素的數組。我需要一種將每三個元素相乘並添加到下一批倍數的方法。什麼是最有效的方式來做到這一點?元素乘法 - 每三個元素

例如;

(myArr[0]*myArr[1]*myArr[2])+(myArr[3]*myArr[4]*myArr[5]*)+(myArr[6]*...myArr[n]) 

也許這可以很容易地完成,但我失去了一些東西。在此先感謝

+1

我可以建議使用所謂的循環嗎? – PlasmaHH

+0

高效的是什麼意思? –

+0

就速度而言(但我稍後會在CUDA中並行化代碼 - 所以不是那麼重要的atm)。數組的大小可以改變,因爲數組來自代碼的另一部分,並且它不一定是三的倍數,這就是爲什麼我無法繞過循環的原因。任何幫助表示讚賞 – user2550888

回答

2

假設數組的大小爲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 
} 
+0

感謝您的相當響應。但是,它不是三的倍數,這就是爲什麼我正在努力想辦法循環它。 – user2550888

+0

@ user2550888相應地更新了答案.. :) – nitish712

+0

測試'我不正確:考慮簡單的情況'size == 3'。通常的「我<尺寸」會做。 –