计算c中的所有模式

时间:2010-02-20 05:48:14

标签: c mode

如果c中有两种或更多模式,你可以给我一些提示吗?

我能够创建一个计算模式的程序,但是如果我有一个具有多种模式的数据集,例如5,3,1,2,3,4,6,4我的程序只找到3作为模式,而不是3和4。 / p>

2 个答案:

答案 0 :(得分:3)

方法可能是这样的:

  1. 确定每个值出现的次数,保留列表
  2. 确定任何值出现的最大次数(通过查看列表)
  3. 查找显示最多次数的所有值(通过查看列表)

答案 1 :(得分:0)

刚才意识到你被限制在C ..猜这个答案不行。

这应该做你想要的(我想......我没试过)。

std::vector<int> calculateModes(std::vector<int> input)
{
    std::sort(input.begin(), input.end());
    std::vector<int> modes;
    int lastModeCount = 0;
    std::vector<int>::const_iterator cursor = input.begin();
    while(cursor < input.end())
    {
        std::vector<int>::const_iterator endOfRun
            = std::find_if(cursor, input.end(),
            std::not1(std::bind2nd(std::equal_to<int>(), *cursor)));
        int modeCount = std::distance(cursor, endOfRun);
        if (modeCount > lastModeCount)
        {
            modes.clear();
            modes.push_back(*cursor);
        }
        else if (modeCount == lastModeCount)
            modes.push_back(*cursor);
        cursor = endOfRun + 1;
    }
    return modes;
}