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

输入: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;
}

运行结果:

(完)

原文地址:https://www.cnblogs.com/fwst/p/4679677.html