-1

我用于查找模式(最常见)以及所述模式显示多少次的代码会进入一个永无止境的循环。有谁知道我能做些什么来修复它?

编辑我更新了代码:它返回 0,这不是模式。

void calculateMode(int array[], int size)
{     
    int counter = 0;
    int max = 0;
    int mode = 0;
    for (int pass = 0; pass < size - 1; pass++)
        for (int count = pass + 1; count < size; count++) {
             if (array[count] > max) {
                max = array[count];
                mode = 1;
                counter = array[pass];
             }

             cout << "The mode is: " << counter "It's been displayed: " << count << "times" << endl; 

        }
4

2 回答 2

0

使用map. 用 编译g++ -std=c++11 a.cpp

这是模式的定义

#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main()
{
    vector<int> v = {1, 1, 2, 2, 3, 3};
    map<int, int> count;

    for (size_t i = 0; i < v.size(); ++i)
        count[v[i]]++;

    vector<int> mode;
    int cnt = 0;
    for (map<int, int>::iterator it = count.begin(); it != count.end(); ++it) {
        if (it->second > cnt) {
            mode.clear();
            mode.push_back(it->first);
            cnt = it->second;
        } else if (it->second == cnt) {
            mode.push_back(it->first);
        }
    }

    if (mode.size() * cnt == v.size()) {
        cout << "No mode" << endl;
    } else {
        cout << "mode:";
        for (size_t i = 0; i < mode.size(); ++i)
            cout << ' ' << mode[i];
        cout << endl;
    }

    return 0;
}
于 2013-11-12T04:31:43.043 回答
0

此代码使用“map”从给定数组中找出 MODE。我希望这个解决方案可以帮助你。

int findMode(int * arr, int size)
{
    map<int, int> modeMap;
    sort(arr, arr + size);
    for (int i = 0; i < size; ++i) {
        ++modeMap[arr[i]];
    }

    auto x = std::max_element(modeMap.begin(), modeMap.end(),
        [](const pair<int, int>& a, const pair<int, int>& b) {
        return a.second < b.second; });

    return x->first;
}
于 2017-02-25T19:29:35.423 回答