【发布时间】:2012-01-17 04:02:23
【问题描述】:
我正在使用以下代码来计算模式
#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;
}
【问题讨论】:
-
在你的 for 循环中,你需要 i
-
您还需要从索引 0,
for (int i = 0; ...开始,因为您当前缺少第一个元素。忘记那个......错过了你已经存储了这个。 -
我以为他是故意从 1 开始的(元素 0 在 for 循环之前读取),但我不知道代码的用途,所以你可能是对的。
-
标题说你想要最大模式,但你的文本说你想要一个所有模式的列表。解决问题的第一步是准确地陈述它。请编辑您的问题以准确说明您真正想做的事情。
-
感谢您的回复并指出对 i{2,3},然后我可以轻松地选择该数组的最小值或最大值,因此在我的示例中分别为 2 或 3。希望能澄清我打算做什么。理想情况下,我会有一个模板模式功能