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中的偶数平方数。在此先感谢您的帮助

4

2 回答 2

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;
}
于 2013-04-10T20:56:53.707 回答
0

问题在于,在第一个 for 循环中,每次找到一个偶数正方形时,都会用 .lenghtIn 的副本填充 arrOut arrIn[i]*arrIn[i]。请注意,i在第二个 for 中没有更改。正确的代码是

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;
于 2013-04-10T21:02:06.667 回答