我正在使用以下代码来计算模式
#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;
}
最佳答案
您的代码的其他部分是错误的,因为它将在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;
}
假设数组按升序排列。
但是,如果要存储最小值或最大值或平均值,则可以不使用向量来执行此操作。
如果横向计数与旧计数相同,则至少在横向上不更改模式
对于最大值,您将为相同的计数分配新值
对于平均值,只需添加所有数字,但跟踪添加的数字。然后在循环结束时只需
avg = sum / no. of element
因此,在所有三种情况下,都不要求vector。
关于c++ - 计算模式最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8452654/