Cis*_*ran 7 c++ random function vector mode
所以我正在尝试制作一个基本程序来学习C++的基础知识,我从0到100生成100个随机数并将它们存储在一个向量中,然后我显示总和,均值,中位数,模式,高和矢量低.除了我遇到困难的模式之外,我还完成了其他所有工作.这是我到目前为止的代码.
int modeFunction()
{
numMode = 0;
count = 0;
for (int n = 0; n < 100; n++)
{
for (int y = 0; y < 100; y++)
{
if (numVector.at(y) == numVector.at(n))
{
numMode = numVector.at(y);
count++;
}
}
}
return numMode;
}
Run Code Online (Sandbox Code Playgroud)
在那之后我陷入困境,因为在我看来它应该有效,但事实并非如此.它只是输出最后一个数字,通常为100.任何帮助都将非常感激.
小智 9
由于所有值都在0到100之间,因此您可以使用直方图有效地找到模式:
std::vector<int> histogram(101,0);
for( int i=0; i<100; ++i )
++histogram[ numVector[i] ];
return std::max_element( histogram.begin(), histogram.end() ) - histogram.begin();
Run Code Online (Sandbox Code Playgroud)
由于模式是最常出现的数字,因此numMode
除非新数字的计数大于计数,否则不应更改numMode
.
编辑:为了澄清,您需要为当前元素和您认为是模式的当前数字保留单独的计数.理想情况下,设置newMode
第一个元素是一个很好的方法.
此外,模式不是必需的唯一(即"1 1 2 2").如果你关心这一点,你可能想要记住这一点.
newMode = element[0]
modeCount = # of occurrence of newMode
for ( i-th element from [1 to end] ) {
tmpCount = # of occurrence of element[i]
if tmpCount > modeCount {
newMode = element[i]
modeCount = tmpCount
}
}
Run Code Online (Sandbox Code Playgroud)