zoukankan      html  css  js  c++  java
  • nyoj 95 众数问题(set)

    众数问题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数,

    多重集合S重的重数最大的元素成为众数。例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。

    现在你的任务是:对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数。

     
    输入
    第一行为n,表示测试数据组数。(n<30)
    每组测试的第一行是一个整数m,表示多重集S中元素的个数为m
    接下来的一行中给出m(m<100)个不大于10万的自然数
    (不会出现不同元素出现的次数相同的情况,如:S={11,11,22,22,33,33})。
    输出
    每组测试数据输出一行,包含两个数,第一个是众数,第二个是其重数,中间以空格隔开。
    样例输入
    1
    6
    1 2 2 2 3 5
    样例输出
    2 3

    用hash表;
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 int hash[100010];
     6 
     7 int main(){
     8     int n, m, temp;
     9     cin >> n;
    10     while(n--){
    11         memset(hash, 0, sizeof(hash));
    12         cin >> m;
    13         for(int i = 0; i < m; i++){
    14             cin >> temp;
    15             hash[temp]++;
    16         }
    17         int max = 0, mark;
    18         for(int i = 0; i < 100001; i++){
    19             if(hash[i] > max){
    20                 max = hash[i];
    21                 mark = i;
    22             }
    23         }
    24         printf("%d %d
    ", mark, max);
    25     }
    26     return 0;
    27 }

    用sort,排序后相同的数在一起。(代码略)

    用multiset集合,count()函数

     1  
     2 #pragma warning(disable:4786)
     3 #include <iostream>
     4 #include <cstdio>
     5 #include <set>
     6 using namespace std;
     7 
     8 int main(){
     9     multiset<int> ms;
    10     int n, m, temp;
    11     cin >> n;
    12     while(n--){
    13         ms.clear();
    14         cin >> m;
    15         for(int i = 0; i < m; i++){
    16             cin >> temp;
    17             ms.insert(temp);
    18         }
    19         multiset<int>::iterator it = ms.begin();
    20         int max = ms.count(*it);
    21         int num = *it;
    22         it++;
    23         while(it != ms.end()){
    24             if(ms.count(*it) > max){
    25                 max = ms.count(*it);
    26                 num = *it;
    27             }
    28             it++;
    29         }
    30         cout << num << " " << max << endl;
    31     }
    32     return 0;
    33 }        
     
  • 相关阅读:
    call/cc 总结 | Scheme
    用call/cc合成所有的控制流结构
    词法作用域 vs 动态作用域
    数论部分第二节:埃拉托斯特尼筛法
    1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
    C++面向对象作业1
    数论部分第一节:素数与素性测试【详解】
    基数排序与桶排序,计数排序【详解】
    计蒜客:百度的科学计算器(简单)【python神解】
    优质免费在线学习网站【自用】
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/6410908.html
Copyright © 2011-2022 走看看