C ++如何找到数组的模式?

时间:2012-12-07 00:28:38

标签: c++ arrays mode

我必须编写一个函数来查找类的值数组的模式。它需要两个参数:值数组和一个等于数组中有效值数的变量。这听起来很容易,但经过一周的尝试后,我的代码似乎无法工作。

我们的想法是采用一维数组并将其存储在二维数组中,其中第一个值是值数组中的值,第二个值是值发生的次数。到目前为止,它不是很正常,或根本没有。问题感觉应该是显而易见的,但我已经被困了一个星期。

我正在使用包含以下内容的数组对其进行测试: 9.0,4.0,4.0,4.0,5.0,5.0,6.0,6.0,6.0,7.0,1.0,9.0,10.0

代码:

void mode(double x[], const int n)
{
    int j, k, m=1, p, numofmodes=0;
    bool match=false, breaker;
    double y[100][2]={0}, max=0;



    y[0][0] = x[0];
    y[0][1] = 1;

    for(j=1; j<=(n-1); j++)  //
    {
        for (k=0; k<=(m-1); k++)
            if (x[j] == y[k][0])
            {
                y[k][1]++;
                match = true;
            }

        if (match == false)
        {
            y[m][0] = x[j];
            y[m][1] = 1;
            m++;
        }
        match = false;
    }



    for(j=0; j<=(n-1); j++)
    {
        if (y[j][1] > max)
            max = y[j][1];
    }

    for(j=0; j<=(n-1); j++)
    {
        if (y[j][1] = max)
            numofmodes++;
    }


    for(j=0; j<=(n-1); j++)
    {
        cout<<y[j][0]<<"    "<<y[j][1]<<endl;
    }


    cout<<"There are "<<numofmodes<< " modes in the data set."<<endl;

    for(j=0; j<=(n-1); j++)
    {
        if (y[j][1] = max)
        {
            cout<<y[j][0]<<" appears "<<max<<" times."<<endl;
        }
    }

}

输出: 9 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 数据集中有13种模式。 9次出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。 0出现2次。

2 个答案:

答案 0 :(得分:0)

2 x if (y[j][1] = max) - 与(match = false)问题类似 - 此时max为2,因此值将被2覆盖。

第一列的问题听起来像是由match = false问题引起的。修复它并重新编译后它仍然存在吗?

答案 1 :(得分:0)

修正了它。我把这里写的主要功能包含在这里。

Input1.txt: 9.0,4.0,4.0,4.0,4.0,4.0,5.0,5.0,6.0,6.0,6.0,6.0,6.0,6.0,7.0,1.0,9.0,10.0,4.0,-9999

我将一些=更改为==并修复了其中一个for循环中的数学错误,现在我看起来似乎是......金色。 Aurum est potestas。 :d

#include <iostream>
#include <cstdlib>
#include <fstream>
void mode(double x[], const int n);
using namespace std;

int main()
{
        const int N = 100;
        double x[N];
        void mode (double x[],int n);
        int n;
        ifstream inFile;

        inFile.open("input1.txt");
        n=0;
        inFile>>x[n];
        while (x[n]!=-9999)
        {
            n++;
            inFile >>x[n];
        }
        inFile.close( );
        mode(x,n);

        inFile.open("input2.txt");
        n=0;
        inFile >>x[n];
        while (x[n]!=-9999)
        {
            n++;
            inFile >>x[n];
        }
        inFile.close( );
        mode(x,n);



        inFile.open("input3.txt");
        n=0;
        inFile >>x[n];
        while (x[n]!=-9999)
        {
            n++;
            inFile >>x[n];
        }
        inFile.close( );
        mode(x,n);

        system ("PAUSE");
        return 0;
}






void mode(double x[], const int n)
{
    int j, k, m=1, p, numofmodes=0;
    bool match=false, breaker;
    double y[100][2]={0}, max=0;

    for(p=0;p<=n-1;p++)
    {
        y[p][0] = x[p];
        y[p][1]++;
    }


    for(j=1; j<=(n-1); j++)
    {
        for (k=0; k<=m; k++)
            if (x[j] == y[k][0])
            {
                y[k][1]++;
                match = true;
                cout<<y[k][0]<<"   "<<y[k][1]<<endl;
            }

        if (match == true)
        {
            y[m][0] = x[j];
            y[m][1] = 1;
            m++;
        }
        match = false;
    }



    for(j=0; j<=(n-1); j++)
    {
        if (y[j][1] > max)
            max = y[j][1];
    }

    for(j=0; j<=(n-1); j++)
    {
        if (y[j][1] == max)
            numofmodes++;
    }


    cout<<"There are "<<numofmodes<< " modes in the data set."<<endl;

    for(j=0; j<=(n-1); j++)
    {
        if (y[j][1] == max)
        {
            cout<<"The number "<<y[j][0]<<" appears "<<max<<" times."<<endl;
        }
    }
    cout<<endl;
}

输出: 数据集中有2种模式。 数字4出现6次。 数字6出现6次。

数据集中有2种模式。 数字2出现3次。 数字5出现3次。

数据集中有4种模式。 数字1出现2次。 数字7出现2次。 数字19出现2次。 数字30出现2次。

按任意键继续。 。