2013-04-10 17 views
0

從主功能:打印甚至從數組正方形到一個單獨的陣列

for (int i = 0; i <= squaresLength; i++) 
    { 
     cout << arraySquares[i] << endl; 
    } 
    cout<<endl; 

函數定義:

void evenSquares(int arrIn[], int lengthIn, int arrOut[], int& lengthOut) 
{ 
    int i, j; 
    for (i=0; i<lengthIn; i++) 
    { 
     if (((arrIn[i]*arrIn[i])%2)==0) 
     { 
      for (j=0; j<lengthIn; j++) 
      { 
       { 
        arrOut[j]=(arrIn[i]*arrIn[i]); 
       } 
      } 

     } 
    lengthOut=j; 
    } 

} 

輸出

25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
25600 
0 

此功能是亂的我知道。它應該計算arrIn的每個元素的平方,然後將偶數平方存儲在arrOut中,同時將lengthOut的新值設置爲arrOut中的偶數平方數。在此先感謝您的幫助

+0

也許你可以通過添加一個預期的輸出的例子來澄清問題? – wallyk 2013-04-10 20:55:11

+0

提示:奇數的平方總是奇數,偶數的平方總是偶數。 – 2013-04-10 21:04:21

回答

2

這不會調用嵌套循環。你想迭代輸入數組並按照比例將項目寫入輸出數組,所以只需要一個循環,並且需要仔細跟蹤arrOut的長度。

偶然地,代替j我們可以使用lengthOut這兩個長度和作爲要添加元素到arrOut的索引。

lengthOut = 0; 

for (i = 0; i < lengthIn; i++) 
{ 
    if ((arrIn[i] * arrIn[i]) % 2 == 0) 
    { 
     arrOut[lengthOut] = arrIn[i] * arrIn[i]; 
     lengthOut++; 
    } 
} 

您也可以通過消除重複計算來改善這一點。

for (i = 0; i < lengthIn; i++) 
{ 
    int square = arrIn[i] * arrIn[i]; 

    if (square % 2 == 0) 
    { 
     arrOut[lengthOut] = square; 
     lengthOut++; 
    } 
} 

此外,第一環路for從差一錯誤遭受:<=<

for (int i = 0; i < squaresLength; i++) 
{ 
    cout << arraySquares[i] << endl; 
} 
+0

讓人更有意義。謝謝你,先生! – iamthewalrus 2013-04-10 20:59:49

+0

你打敗了我,當橙色盒子出現時,我正處於同樣的答案中。 – Cemafor 2013-04-10 21:00:04

0

的問題是,在第一個爲週期,每次都發現一個更方,填寫阿爾魯與arrIn[i]*arrIn[i] lenghtIn副本。請注意,i在第二個不會改變。 一個正確的代碼將是

int i,j,square; 
j = 0; 
for (i=0; i<lenghtIn; i++) { 
    square = arrIn[i]*arrIn[i]; 
    if (square%2==0) 
     arrOut[j++] = square; 
} 
lenghtOut = j;