我正在在线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,因为它们在文本文件中排在一起。
感谢您的帮助,在此先感谢您。
答案 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>>