从列表到数组C查找模式或最常出现的数字

时间:2019-03-21 18:38:02

标签: c++

我正在在线gdb上工作,我的问题是,给定文本文件中的随机数,我需要一个程序将这些数字保存到数组中,然后需要显示模式。

这里是数字 50 28 84 41 52 22 22 74 33 93 85 73 36 86 49 7 53 85 46 2 53 36 43 38 13 43 30 12 41 69 70 91 84 77 35 51 13 33 92 75 16 18岁 69 26 49 35 93 72 16 88 84

我已经完成了前两部分,并且它们可以工作。我的问题是找到模式。

这是我的代码

#include <iostream>
#include <fstream>
using namespace std;

//function prototype 
void calculateMode(int [], int );

//**************
//*Main function
//* has getting text file then storing into array and then function to finding the mode 
//************
int main ()
{
    const int ARRAY_SIZE = 51; // constant so we can use it outside of main 
    int numbers [ARRAY_SIZE];
    int count = 0; // loop counter varible 
    ifstream inputFile; // input file stream object 

    //opening the file 
    inputFile.open("file.txt");

    //reading the numbers from the file then putting it into the array 
    while (count < ARRAY_SIZE && inputFile >> numbers [count])
    count ++;

    // closing file
    inputFile.close();

    // calling on our function for calculating mode 
    calculateMode(numbers, ARRAY_SIZE); 

    return 0;
}

//*********
//* Calculating the mode funtion 
//* calculates mode and then displays it 
//*********
void calculateMode(int ARRAY_SIZE[], int size)
{
        int counter = 0; // loop counter varible 
        int max = 0; // using this for maximum value for an object of type int so it can hold a lot 
        int mode = ARRAY_SIZE[0]; 
        for (int pass = 0; pass < size - 1; pass++) 
        {
           for (  ) // for loop suppose to be here 
           {
              counter++;
              if ( counter > max )
              {
                  max = counter;
                  mode = ARRAY_SIZE[pass]; // not sure if this algorithm for finding mode is correct 
              }
           } else 
              counter = 1; // reset counter.
        }
    cout << "The mode is " << mode << endl; // cout the mode 
}

如您在我的函数中所看到的那样,for之后我不知道从哪里开始。我应该有两个for循环。另外,我不知道我的算法是否有效,因为当我在有一个if语句可以检查每个数字的值之前对其进行检查时。然后我得到了22,因为它们在文本文件中排在一起。

感谢您的帮助,在此先感谢您。

1 个答案:

答案 0 :(得分:2)

如果像您的示例一样,您的值始终为0-99,则足以满足这个configureMode()的需求:

    void calculateMode(int ARRAY_SIZE[], int size)
    {
        int MODE_COUNTER[100] = { 0 };
        int mode = 0;
        int max = 0;

        for (int i = 0; i < size; i++)
            if (++MODE_COUNTER[ARRAY_SIZE[i]] > max)
            {
                mode = ARRAY_SIZE[i];
                max = MODE_COUNTER[ARRAY_SIZE[i]];
            }

        cout << "The mode is " << mode << endl; // cout the mode 
    }

但是理想的解决方案是使用动态MODE_COUNTER []对象。我会使用vector<pair<int,int>>