我正在使用以下代码来计算模式
#include <iosfwd>
#include <vector>
#include <iostream>
int prices[]={1,1,2,2,2,3,3,3};
int main()
{
double currval=prices[0];
int ctr=1;
int maxctr=1;
double modval=prices[0];
for (int i=1;i<8;i++) {
if(prices[i]==currval) {
++ctr;
}else {
if(ctr>maxctr) {
maxctr=ctr;
modval=currval;
}
currval=prices[i];
ctr=1;
}
}
std::cout<<"mode is: "<<modval<<std::endl;
return 0;
}
但不幸的是,这会返回第一种模式。
mode is: 2
我想继续传递数组并捕获另一个数组中的所有模式,这样我就可以选择模式数组的最大值或最小值或平均值。因此,在我的示例中,我将有一个内容为 {2,3} 的数组。 关于我如何做到这一点的任何建议。 谢谢! 编辑:
#include <iosfwd>
#include <vector>
#include <iostream>
int prices[]={1,1,2,2,2,3,3,3};
std::vector<int> result;
int main()
{
double currval=prices[0];
int ctr=1;
int maxctr=1;
double modval=prices[0];
for (int i=1;i<8;i++) {
if(prices[i]==currval) {
++ctr;
}else {
if(ctr>maxctr) {
maxctr=ctr;
result.clear();
result.push_back(currval);
} else {
if (ctr==maxctr) {
result.push_back(currval);
}
}
currval=prices[i];
ctr=1;
}
}
if(ctr>maxctr) {
maxctr=ctr;
result.clear();
result.push_back(currval);
} else {
if (ctr==maxctr) {
result.push_back(currval);
}
}
return 0;
}
最佳答案
您的代码在 else 之后的部分是错误的,因为它将在 if
和 else
之后执行,这不是我们想要的。
#include <iosfwd>
#include <vector>
#include <iostream>
int prices[]={1,1,2,2,2,3,3,3};
using namespace std;
int main()
{
int ctr=1;
int maxctr=1;
vector<int> allModes;
int max, min;
for (int i=0; i<8; i++) {
if(prices[i+1]==prices[i]) {
++ctr;
}
else {
if(ctr == maxctr) {
allModes.push_back(prices[i]); //if it is same as previous mode add it to vector
//max = prices[i];
}
if(ctr > maxctr) {
allModes.clear(); //if it is greater than previous mode then previous number is not a mode now
//so clear old vector
allModes.push_back(prices[i]);
maxctr = ctr;
//max = prices[i];
//min = prices[i];
}
ctr=1;
}
}
std::cout<<"Mode: ";
for ( vector<int>::iterator it=allModes.begin() ; it < allModes.end(); ++it ) {
std::cout<< " " << *it;
}
return 0;
}
假设数组按升序排列。
但是如果你想存储最小值或最大值或平均值,你可以不使用 vector 来做到这一点。
对于 min 和 transverse 如果它与旧的有相同的计数则不要改变模式
对于最大值,您将为相同的计数分配新值
对于平均数,只需将所有数字相加,但要跟踪相加的数字。然后在循环结束时取
avg = sum/no。元素的
所以在所有这三种情况下,都不需要 vector 。
关于c++ - 计算模式最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8452654/