奇数细胞的平均值?

时间:2013-11-18 22:35:38

标签: c++

对于我正在进行的练习,我应该找出数组中奇数编号单元格中包含的项目的平均值以及其他一些内容。在我唯一遇到问题的事情中查找奇数编号单元格的平均值。这是我的代码,我做错了什么?最后的函数是奇数细胞的平均函数。感谢。

#include <iostream>
#include <iomanip>

using namespace std;

const int SIZE = 1000;
int randoms[SIZE];
int sum2 = 0;
int top = 0;
int maximum = 0;

int highest(int randoms[]);
int findsum(int randoms[]);
int average(int randoms[], int sum);
int oddavg(int randoms[]);

int main()
{
    int sum = 0;
    int top = 0;
    int avg = 0;
    int oddaverage = 0;


    for (int i = 0; i < SIZE; i++)
    {
        randoms[i] = (rand() % 5000 + 1);
        cout << randoms[i] << setw(10) << " ";
    }

    cout << endl << endl;
    cout << "The sum of the values in the array is ";

    sum = findsum(randoms);

    cout << sum << endl;

    cout << endl << endl;
    cout << "The highest value in the array is ";

    top = highest(randoms);

    cout << top << endl;

    cout << endl << endl;
    cout << "The average of all of the numbers in the array is ";

    avg = average(randoms, sum);

    cout << avg << endl;

    cout << endl << endl;
    cout << "The average of all of the numbers in the odd cells is ";

    oddaverage = oddavg(randoms);
}

int findsum(int randoms[])
{
    for (int i = 0; i < SIZE; i++)
    {
        sum2 += randoms[i];
    }
    return sum2;
}

int highest(int randoms[])
{
    for (int i = 0; i < SIZE; i++)
    {

        if (randoms[i] > maximum)
        {
            maximum = randoms[i];
        }
    }

    top = maximum;

    return top; 
}

int average(int randoms[], int sum)
{
    int avg = 0;

    for (int i = 0; i < SIZE; i++)
    {
        avg = (sum / SIZE);
    }

    return avg;
}

int oddavg(int randoms[])
{
    int avg = 0;
    int sum = 0;

    for (int i = 0; i < SIZE; i++)
    {
        if (randoms[i] / 2 == 1)
        {
            sum += randoms[i];
        }

    }
     avg = sum / SIZE;

     return avg;
}

5 个答案:

答案 0 :(得分:3)

在这种情况下进行奇数/偶数测试(使用模数建议)在这种情况下完全是多余的,因为循环没有做任何其他事情。

你可以使用2的步幅并从第一个奇数元素开始:

for (int i = 1; i < SIZE; i += 2)
{
   sum += randoms[i];
}

然后只需将SIZE的一半分开。如果该数字是偶数,则有SIZE/2个奇数。如果它是奇数,则有lbound(SIZE/2)+1个奇数。幸运的是,您可以利用整数截断,只需执行:

double avg = double(sum) / double((SIZE+1) / 2);

你甚至不必担心被零除= =

答案 1 :(得分:1)

应为if (randoms[i] % 2 == 1) 你还需要计算奇数的数量。

答案 2 :(得分:0)

randoms[i] / 2 == 1,只有在单元格值为23时才会出现这种情况,这肯定不是您需要做的。

如果你需要对具有赔率索引的单元格的值求和,那么它应该是(i % 2 == 1)。如果您正在寻找奇数值(在任何单元格中),它应该是if (randoms[i] % 2 == 1)

请注意%modulo操作,它返回整数除法的整数余数。

由于你在计算平均值,你应该除以找到的元素数量,而不是总数。

答案 3 :(得分:0)

您应该使用%代替

randoms[i] % 2 == 1

答案 4 :(得分:0)

int oddavg(int randoms[])
{
    int cnt = 0;
    int avg = 0;

    for (int i = 0; i < SIZE; i++)
    {
        if ( randoms[i] % 2 != 0 )
        {
            ++cnt; 
            avg += randoms[i];
        }

    }

     return ( cnt == 0 ? avg : avg / cnt );
}