衆數問題-set

描述

所謂衆數,就是對於給定的含有N個元素的多重集合,每個元素在S中出現次數最多的成爲該元素的重數,

多重集合S重的重數最大的元素成爲衆數。例如:S={1,2,2,2,3,5},則多重集S的衆數是2,其重數爲3。

現在你的任務是:對於給定的由m個自然數組成的多重集S,計算出S的衆數及其重數。

 

題目鏈接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=95

題目大意:找到並輸出 每組樣例中 出現次數最多的元素以及該元素出現的次數

解題思路:

         1.利用 multiset  ,因爲其不僅可以自動排序 而且插入的值可以重複;

         2.利用multiset  中的count(val) 函數,該函數可以在容器中搜索等效於val的元素並返回匹配數。 即統計該元素出現的次數。

運行代碼:

#include<iostream>
#include<set>
#include<cstdio>
using namespace std;
int main()
{
    multiset<int>ms; //定義一個插入的值可以重複的集合
    int n,m,value;
    scanf("%d",&n); //輸入示例個數
    while(n--)
    {
        scanf("%d",&m); //輸入該樣例的元素個數
        for(int i=0;i<m;i++)
        {
            scanf("%d",&value);
            ms.insert(value);    //將數據元素插入到multiset中
        }
        multiset<int>::iterator it; //定義迭代器
        int max =0,num;   //max 爲重數 num爲個數
        for(it=ms.begin();it!=ms.end();it++)//遍歷集合
        {  
           if(max<ms.count(*it))    //如果重數小於該元素出現個數
           {
               max=ms.count(*it);   //令 ms.count(*it) 爲重數
               num=*it;             //當前數據爲衆數
           }
        }
         cout<<num<<" "<<max<<endl; //輸出 衆數 和 重數
            ms.clear();
    }

}

示例:

樣例輸入

1
6
1 2 2 2 3 5

樣例輸出

2 3

運行結果: 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章