簡體   English   中英

在C ++中查找最大,最小和模式

[英]Finding Max, Min and Mode in c++

因此,基本上我正在嘗試編寫一個程序,該程序接受整數數組,然后輸出“最大最小”和“ 最小模式”以及它發生了多少次。 我已經能夠找到最大和最小以及模式,但是我的代碼不是最小模式,而是輸出最先出現的模式。 而且我不確定如何用多個模式處理輸入。 下面,我將發布我的代碼:#include using namespace std;

   int main() {
  int p,max,min,mode;


    cout << "Enter the number of postive integers:"<< endl;
    cin >> p;
    int pos[p];
    cout << "Now enter postive integers!" <<endl;
    for(int i=0; i<p; i++) {
        cout << "Positive integer " << i+1 << ":";
        cin >> pos[i]; }
     max =pos[0];
     min =pos[0];
    for( int i=0; i<p; i++){
        if(pos[i]> max) max=pos[i];
        if(pos[i]< min) min=pos[i];
    }
    cout << "Max=" << max << endl;
    cout << "Min=" << min <<     mode= pos[0];
    int count[20];
    int t=0;
        for(int c=0;c<p; c++)
        {
            for(int d=0;d<p;d++)
            {
                if(pos[c]==pos[d])
                {
                    count[c]++;
                    t++;
                }
            }

    int modepos, maxno=count[0];
            for(int e=1;e<p;e++)
            { 
                if(maxno<count[e])
                {
                    maxno=count[e];
                    modepos=e;
    }
    }
    mode=pos[modepos];
            if(t==1) {
                cout << "There is no positive integer occuring more       
    than once." << endl;

            }
            else {

            cout <<"The most occuring positive integer is:"<< mode;
            cout << "\nIt occurs " << t << " times." << endl;

            } return 0; }

可能有更簡單,更好的方法對此進行編碼,但是由於我是一個初學者,並且只學習過循環/條件/數組/變量聲明等,所以我只能在程序中使用它們,將不勝感激。

您了解std :: map嗎? 使用std :: map計算一個數組中一個元素的次數非常簡單的算法

std::map<long, long > mapFreq;// first: for store value of array pos, second for store value's counter
mapFreq.insert(std::pair<long, long>(pos[0], 1));
for(int i = 1; i < dsize; i++)
{
    auto &it = mapFreq.find(pos[i]);
    if(it != mapFreq.end())
    {
        it->second++;
    }
    else
    {
        mapFreq.insert(std::pair<long, long>(pos[i], 1));
    }
}

然后,您可以遍歷地圖Freq以獲取所需的內容:

int number, counter;
for(auto it : mapFreq)
{
    if(it.second < counter)
    {
        number = it.first;
        counter = it.second;
    }
}

也許您可以嘗試這樣做:

#include <iostream>
#include <algorithm> //for sorting
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++) cin>>a[n];
sort(a,a+n);
int b[a[n-1]];
for(int i=0;i<a[n-1];i++) b[i]=0;
for(int i=0;i<n;i++) b[a[i]]++;
cout<<"Largest number = "<<a[n-1]<<endl;
cout<<"Smallest number = "<<a[0]<<endl;
int rep=0;//repetition
int mode=0;
for (int i=0;i<a[n-1];i++){
  if(b[i]>rep){
    rep=b[i];// set times of repetition
    mode=i;// set new mode
  }
}
cout<<"Mode = "<<mode<<endl;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM