查找数组中数组元素的重复出现?

时间:2018-06-29 17:10:46

标签: c++ arrays

最近,我开始学习C ++。我着手解决这个问题,寻找平均分数,最高分数和最低分数,缺席学生的人数以及重复的分数。

平均,最低和最高分数以及缺勤学生的数量正在按预期工作。但是,重复的标记无法正常工作。

有问题的案例是案例编号5。

它在某种程度上有效,但是当我输入(1,2,1,2,3备用输入)并且 (1,2,1,2,1)会忽略数字之一/再次打印一些数字。 由于我的知识有限,我不知道该怎么办。这个程序有什么解决方案吗?

我试图消除它,但是正常(不是备用输入)不能正常工作。

您能否提供一种我可以理解的替代方式?

这是我的代码

#include <iostream>
using namespace std;
int main()
{
    int Marks[5], i, high, low, menu;
    int absent, extra=0, recurr, rcount=0, z;
    int hexa=0,seca ,octa=0;

    float average, sum = 0;
    for(i=0; i<5; i++)
    {
        cout<<"Enter no of mark:";
        cin>>Marks[i];
    }

    for(i=0; i<5; i++)
        if(Marks[i]!=-1)
        {
            sum=sum+Marks[i];
            extra++;
        }

    cout<<"Choose your operation you want to perform";
    cout<<" \n 1.Average marks of the class \n 2.Highest Scores in Class \n 3.Lowest score in class\n 4.No of absent student\n 5.No of recurring element";

    cin>>menu;
    average=sum/extra;
    switch(menu)
    {
        case 1:
            cout<<"Average="<<average;
            break;
        case 2:
            high=Marks[0];

            for(i=0; i<5; i++)
                if(high<=Marks[i])
                    high=Marks[i];

            cout<<"Highest marks= "<<"\n"<<high;
            break;
        case 3:
            if(Marks[i]!=-1)
            {
                low=Marks[0];

                for(i=0; i<5; i++)
                    if(Marks[i]!=-1)
                        if(low>=Marks[i])
                            low=Marks[i];

                cout<<"Lowest Marks="<<"\n"<<low;
            }
            break;
        case 4:
            absent=Marks[0];

            for(i=0; i<5; i++)
                if(Marks[i]==-1) //if -1 is entered it is counted as absent
                    cout<<"Student no\t"<<i+1<<"\twas abesnt for the exam";

            break;
        case 5:
            //Here is the function that is giving me problem
            for(seca=0; seca<5; seca++)
            {
                recurr=Marks[hexa];
                for(i=0; i<5; i++)
                    if(recurr==Marks[i])
                    {
                        rcount++;
                        z=rcount;
                        if(z==2)
                            octa++;

                        if(octa>2)
                            octa--;

                    }

                hexa++;

                if(z<2)
                    cout<<"Number "<<recurr<<"is repeated "<<z<<" times\n";

                if((octa>1)&&(octa<5))
                {
                    cout<<"Number "<<recurr<<"is repeated "<<z<<" times\n";
                    octa=0;
                }
                rcount=0;
            }
            break;
        default:
            cout<<"Choose a valid option!!";
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

据我说,您应该首先对其进行排序,然后您会发现它很容易计算发生次数。当您不熟悉C ++时,我建议您使用一种叫做Bubble Sort的排序技术,这对您来说很容易:

for(i=0; i<(n-1); i++)
{
    for(j=0; j<(n-i-1); j++)
    {
        if(arr[j]>arr[j+1])
        {
            temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
    }
}

现在排序后,如果您仍然发现一些错误或疑问,请仅统计发生的次数,请回复,或者如果您没有找到方法,我将进一步解释:)