• (面试题)统计数组中数字的个数


    输入:10个整数,如 9 9 0 7 8 6 5 7 3 9

    输出:统计每个数字出现的次数,并按数字的大小排序

        0:1

        3:1

        5:1

        6:1

        7:2

        8:1

        9:3

    一、C++版本

    #include <iostream>
    #include <map>
    using namespace std;
    
    int main()
    {
        map<int, int> m;
        int input[10];
        int i;
        for (i = 0; i < 10; i++)
        {
            cin >> input[i];
            m[input[i]]++;
        }
        
        map<int,int>::iterator m_iter;
        for (m_iter = m.begin(); m_iter != m.end(); m_iter++)
        {
            cout<<m_iter->first<<":"<<m_iter->second<<endl;
        }
    
        return 0;
    }

    1. 用map事半功倍

    2. map中自动按key值升序排序

    输出:

    二、C版本(忽略cin,cout)

        不如C++版本用map简洁,有点绕

    #include <iostream>
    //#include <map>
    using namespace std;
    
    struct MyMap{
        int key;
        int value;
    };
    
    int main()
    {
        MyMap m[10];
        //需要初始化为0
        memset(m, 0, sizeof(MyMap)*10);
    
        int a[10];
        
        cout<<"输入10个整数:";
        for (int i =0; i < 10; i++)
        {
            cin>>a[i];
        }
        //k相当于依次存到m里时的结尾位置
        int k = 0;
        //遍历输入的每个数字
        for (int i = 0; i < 10; i++)
        {
            //k等于0说明m里没有数据,直接存入
            if (k == 0)
            {
                //当m里存入数据时,k的值需要往后移
                m[k].key = a[i];
                m[k].value++;
                k++;
            }else {
            //k不等于0时要从0依次比较到结尾位置k,有相同的则存入相应位置,如果到结尾也没用相同的则存入最后
                int flag = 0;
                for (int j = 0; j < k; j++)
                {
                    if (m[j].key == a[i])
                    {
                        m[j].value++;
                        flag = 1;
                        break;
                    }
                }
                if (flag == 0){
                    m[k].key = a[i];
                    m[k].value++;
                    k++;
                }
            }    
        }
    
        //对结果排序
        for (int i = 0; i < 10; i++)
        {
            if (m[i].value == 0)
                break;
            for (int j = i+1; j < 10; j++)
            {
                if (m[i].key > m[j].key && m[j].value != 0)
                {
                    MyMap tmpMap;
                    tmpMap = m[i];
                    m[i] = m[j];
                    m[j] = tmpMap;
                }
            }
        }
    
        //输出结果
        for (int i = 0; i < 10; i++)
        {
            if (m[i].value == 0)
                break;
            cout<<m[i].key<<":"<<m[i].value<<endl;
        }
    
        return 0;
    }

    运行结果:

    (完)

  • 相关阅读:
    MySQL常见错误解决方案
    mybatis连接MySQL8出现的问题
    mybatis逆向工程出现的问题
    linux学习——基础命令
    java excel导入oracle数据库
    关于layer弹框点击关闭按钮的问题
    java was started but return exit code=-805306369
    设计模式入门学习笔记----装饰者模式
    设计模式入门学习笔记----观察者模式
    设计模式入门学习笔记----策略模式
  • 原文地址:https://www.cnblogs.com/fwst/p/4679677.html
Copyright © 2020-2023  润新知