【CCF CSP】 201503-2 Number Sorting (100 points)

Question number: 201503-2
Question name: Number sort
time limit: 1.0s
Memory limit: 256.0MB
Problem Description:
Problem Description
  Given n integers, count the number of occurrences of each integer, and output them in descending order of occurrence.
input format
  The first line of input contains an integer n representing the number of given digits.
  The second line contains n integers, and adjacent integers are separated by a space, representing the given integer.
output format
  Output multiple lines, each line containing two integers representing a given integer and the number of times it appears. Output in descending order of occurrence. If two integers appear the same number of times, output the smaller value first, then the larger value.
sample input
12
5 2 3 3 1 3 4 2 5 2 3 5
Sample output
3 4
2 3
5 3
1 1
4 1
Evaluate use case size and conventions
  1 ≤ n ≤ 1000, the numbers given are all non-negative integers up to 1000.

code

C++

#include <iostream>
#include <vector>
#include <algorithm> 
#define MAX_SIZE 1001
using namespace std; 

//数字对象 
class Number
{
    public:
        int number;
        int frequency;
};


//排序规则 
bool frequency_sort(Number a,Number b)
{
    if(a.frequency>b.frequency)
        return true;
    else if(a.frequency==b.frequency&&a.number<b.number) 
        return true;
    else
        return false;
}

//计算频率的数组 
int numbers[2][MAX_SIZE]={};

int main(int argc, char** argv) {
    int n,temp;
    vector<Number> vec_numbers;
    cin>>n;
    //用数组计算频率 
    for(int i=1;i<=n;i++)
    {
        cin>>temp;
        numbers[1][temp]++;
    }

    //将数据放到vector中排序 
    for(int i=0;i<=MAX_SIZE;i++)
    {
        if(numbers[1][i]!=0)
        {
            Number number;
            number.number=i;
            number.frequency=numbers[1][i];
            vec_numbers.push_back(number);
        }
    }

    //排序 
    stable_sort(vec_numbers.begin(),vec_numbers.end(),frequency_sort);

    //输出
    for(vector<Number>::iterator it=vec_numbers.begin();it!=vec_numbers.end();it++)
    {
        cout<<it->number<<" "<<it->frequency<<endl;
    }

    return 0;
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325919430&siteId=291194637