【CCF CSP】 201503-2 数字排序(100分)

xiaoxiao2021-02-28  60

试题编号:201503-2试题名称:数字排序时间限制:1.0s内存限制:256.0MB问题描述: 问题描述   给定 n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式   输入的第一行包含一个整数 n,表示给定数字的个数。   第二行包含 n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。 输出格式   输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 5 2 3 3 1 3 4 2 5 2 3 5 样例输出 3 4 2 3 5 3 1 1 4 1 评测用例规模与约定   1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。

代码

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; }
转载请注明原文地址: https://www.6miu.com/read-2621513.html

最新回复(0)