ccf-csp 201503-2数字排序

简介: ccf-csp 201503-2数字排序

ccf-csp 201503-2 数字排序



给定 n 个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。


输入格式


输入的第一行包含一个整数 n,表示给定数字的个数。

第二行包含 n 个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。


输出格式


输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。

按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。


数据范围


1≤n≤1000,

给出的数都是不超过 1000 的非负整数。


输入样例:


12

5 2 3 3 1 3 4 2 5 2 3 5


输出样例:


3 4

2 3

5 3

1 1

4 1


代码如下,后面有解释

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1010;
int cnt[N];
bool cmp(int a,int b)
{
  return (cnt[a] > cnt[b]) ?  true : cnt[a] == cnt[b] ?  (a < b) : false;  
}
int main()
{
  int n;
  scanf("%d",&n);
  for(int i = 0 ; i < n ; i ++){
    int x;
    scanf("%d",&x);
    cnt[x]++;
  }
  vector<int> res;
  for(int i = 0 ; i <= 1000 ; i ++){
    if(cnt[i]) res.push_back(i);
  }
  sort(res.begin(),res.end(),cmp);
  int count = res.size();
  for(int i = 0 ; i < count ; i++) cout << res[i] <<' '<< cnt[res[i]]<<endl;
  //c++11中auto关键字,也可以这样写
  //for(auto x : res) cout << x << ' ' << cnt[x] << endl;
  return 0;
}


c++中sort 函数用法

sort ( start , end , 排序方法) 默认的是从小到大排序
//实现从大到小排序
bool cmp(int a,int b)
{
    return  a > b;
}


三目运算符

对于条件表达式b ? x : y;
先计算条件b,然后进行判断。
如果b的值为true,计算x的值,运算结果为x的值;
否则,计算y的值,运算结果为y的值。


//解释一下代码中的三目运算符
return (cnt[a] > cnt[b]) ?  true : cnt[a] == cnt[b] ?  (a < b) : false;
//先判断cnt[a]是否大于cnt[b]
//如果cnt[a] >cnt[b] ,则返回true 
//否则判断 cnt[a] == cnt[b]
//如果相等,按题意先返回小的那个值,否则返回false

c++ vector容器简介

声明
    #include <vector>   头文件
    vector<int> a;    相当于一个长度动态变化的int数组
    vector<int> b[233]; 相当于第一维长233,第二位长度动态变化的int数组
    struct rec{…};
    vector<rec> c;    自定义的结构体类型也可以保存在vector中
size/empty
       size函数返回vector的实际长度(包含的元素个数),
       empty函数返回一个bool类型,表明vector是否为空。
       二者的时间复杂度都是O(1)。
       所有的STL容器都支持这两个方法,含义也相同,之后我们就不再重复给出。
clear
    clear函数把vector清空。
迭代器
    迭代器就像STL容器的“指针”,可以用星号“*”操作符解除引用。
    一个保存int的vector的迭代器声明方法为:
    vector<int>::iterator it;
vector的迭代器是“随机访问迭代器”
可以把vector的迭代器与一个整数相加减,其行为和指针的移动类似。
可以把vector的两个迭代器相减,其结果也和指针相减类似,得到两个迭代器对应下标之间的距离。
begin/end
begin函数返回指向vector中第一个元素的迭代器。
例如a是一个非空的vector,则*a.begin()与a[0]的作用相同。
所有的容器都可以视作一个“前闭后开”的结构,end函数返回vector的尾部,即第n个元素再往后的“边界”。*a.end()与a[n]都是越界访问,其中n=a.size()。
下面两份代码都遍历了vector<int>a,并输出它的所有元素。
for (int I = 0; I < a.size(); I ++) cout << a[i] << endl;
for (vector<int>::iterator it = a.begin(); it != a.end(); it ++) cout << *it << endl;
front/back
    front函数返回vector的第一个元素,等价于*a.begin() 和 a[0]。
    back函数返回vector的最后一个元素,等价于*==a.end() 和 a[a.size() – 1]。
push_back() 和 pop_back()
        a.push_back(x) 把元素x插入到vector a的尾部。
    b.pop_back() 删除vector a的最后一个元素。


最后:写的博客比较随性,供自己学习巩固,也接受大家的批评和指正!

目录
相关文章
ccf-csp 2014 03-2窗口
在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。 窗口的边界上的点也属于该窗口。 窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。 当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。 如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。 现在我们希望你写一个程序模拟点击窗口的过程。
90 0
|
人工智能 算法 测试技术
[CCF CSP] 每日一题20170301
[CCF CSP] 每日一题20170301
109 0
|
算法 测试技术 Go
[CCF CSP] 每日一题20171202
[CCF CSP] 每日一题20171202
88 0
|
机器学习/深度学习 人工智能 自然语言处理
ACL 2022|复旦、字节等推出首个可解释类比推理数据集,中英双语
ACL 2022|复旦、字节等推出首个可解释类比推理数据集,中英双语
166 0
|
机器学习/深度学习 算法 安全
CCF—CSP第一题题解(C++)
CCF—CSP第一题题解(C++)
287 0
CCF—CSP第一题题解(C++)
|
JSON 资源调度 安全
CCF-CSP认证历年题解
CCF-CSP认证历年题解
1784 1
CCF-CSP认证历年题解
|
人工智能 算法
【CCF-CSP】202112-1-序列查询100分
【CCF-CSP】202112-1-序列查询100分
322 0
【CCF-CSP】202112-1-序列查询100分
【CCF-CSP】201709-1打酱油100分
【CCF-CSP】201709-1打酱油100分
111 0
【CCF-CSP】201709-1打酱油100分
【CCF-CSP】202109-1-数组推导100分(含详细注释)
【CCF-CSP】202109-1-数组推导100分(含详细注释)
201 0
【CCF-CSP】202109-1-数组推导100分(含详细注释)
|
人工智能 移动开发 Go
【CCF-CSP】202112-2-序列查询新解100分(读过必懂)
【CCF-CSP】202112-2-序列查询新解100分(读过必懂)
1077 0
【CCF-CSP】202112-2-序列查询新解100分(读过必懂)