c++ - 将数组中的偶数正方形打印到单独的数组中

标签 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中偶数平方的个数。预先感谢您的帮助

最佳答案

这不会调用嵌套循环。您想要遍历输入数组并按比例将项目写入输出数组,因此只需要一个循环,以及对 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;
}

关于c++ - 将数组中的偶数正方形打印到单独的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15936155/

相关文章:

c++ - 在 C++ 中返回 vector 元素的复制值

c++ - 分配但不使用分配器的标准库设施

c++ - 使用 strcat 后删除字符数组会导致段错误

c++ - 在 c++ WWSAPI Web 服务中处理 WS-Security PasswordDigest 模式

c++ - 技巧编译器用于编译 128 位整数的基本算术运算

c++ - gdb "static field value has been optimized out"用于具有非类型参数的类模板的静态成员

c++ - 如何选择 SQLite 日期格式

c++ - 非最后一个参数包编译错误

c++ - 使用一个 Makefile 构建多个共享库

c++ - 拥有字符串映射如何将其与给定字符串进行比较