奇数单元格的平均值
Average of odd cells?
对于我正在做的一个练习,我应该找出数组奇数单元格中包含的项的平均值以及其他一些东西。在我唯一有问题的事情中找到奇数单元格的平均值。这是我的代码,我做错了什么?最后一个函数是奇数单元格的平均函数。谢谢
#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;
}
在这种情况下进行奇数/偶数测试(按照许多人的建议使用模)是完全多余的,因为循环不做任何其他事情。
你可以使用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);
您甚至不必担心被零整除=)
应为if (randoms[i] % 2 == 1)
你还需要计算奇数的数量。
randoms[i] / 2 == 1
,只有当单元格值为2
或3
时,这才是真的,这当然不是你需要做的。
如果你需要用比值指数求和单元格的值,那么它应该是如果(i % 2 == 1)
。如果您正在查找奇数(在任何单元格中),则应该是if (randoms[i] % 2 == 1)
。
注意,%
是模运算,它返回整数除法的整数余数。
既然你在计算一个平均值,你应该除以元素的数量,而不是总数。
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 );
}
相关文章:
- 将QIcon添加到QTableView单元格
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 查找矩阵中单元格的相邻元素
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 当我使用需要计算数组单元格地址的模板时,奇怪的C++行为
- PyQT - 在 QTableWidget 单元格中显示垂直文本
- 2D 数组,某些单元格保存特定数据
- 为什么通过定义另一个指针单元格,整个代码停止工作?
- CLI/C++dataGridView示例-设置comobox单元格列表的索引
- 用单元格表示迷宫
- 为什么不能使用 setData() 在 QTreeView 中设置单元格的背景颜色?
- 将 GtkTreeView 中的单元格设置为以编程方式编辑模式
- 如何防止Qt中的当前单元格更改信号或跳过"processing"?
- 将当前多边形数据单元与下一个多边形单元格 - VTK 进行比较
- VTK:尝试使用 vtkrubberbandpick&vtkHardwareSelector 选择区域中的可见单元格
- QTableWiget::cellChanged 信号不会为具有 QTableWidgetItem 的单元格发出
- 当存在空单元格时,用于 c++ 的 Tsv 文件解析器会突然结束
- C++ unordered_map<T,int> 如何区分空单元格和 0
- 基于单元格代替QTableWidget中的一行
- 奇数单元格的平均值