将偶数方块从数组打印到单独的数组中

时间:2013-04-10 20:52:36

标签: c++

从主要功能:

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

问题在于,在第一个for循环中,每次找到偶数平方时,都会使用arrIn[i]*arrIn[i]的lenghtIn副本填充arrOut。请注意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;