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

Printing the even squares from an array into a separate array

本文关键字:数组 打印 单独 方打印      更新时间:2023-10-16

From main function:

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的每个元素的平方,然后将偶数平方存储在arout中,同时将lengthOut的新值设置为arout中偶数平方的数量。提前感谢您的帮助

这不会调用嵌套循环。您希望遍历输入数组并按比例将项写入输出数组,因此只需要一个循环,并仔细跟踪arrOut的长度。

幸运的是,我们可以使用lengthOut作为j的长度和索引,以向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循环会出现一个差1的错误:<=应该是<

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

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