问题描述
试题编号: 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 <utility>
#include <iostream>
#include <map>
#include <iterator>
#include <functional> using namespace std; int main(){
map<int,int> j;
multimap<int,int,greater<int> > jj;
int n;
cin>>n;
for(int i=;i<n;i++)
{
int a;
cin>>a;
j[a]++;
}
for(map<int,int>::iterator it = j.begin();it!=j.end();it++)
{
jj.insert(pair<int,int>(it->second,it->first));
}
for(map<int,int>::iterator it = jj.begin();it!=jj.end();it++)
{
cout<<it->second<<" "<<it->first<<endl;
}
return ;
}

运行结果:

  

实现代码(java):

  

 import java.util.Arrays;
import java.util.Scanner; public class NumberPaixu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[n + ];
display(sort_2(type_arr(input1(arr, sc))));
} public static int[] input1(int arr[], Scanner sc) {
int len = arr.length;
for (int i = ; i < len - ; i++) {
arr[i] = sc.nextInt();
}
arr[len - ] = ;
return arr;
} public static int[][] type_arr(int arr[]) {
Arrays.sort(arr);
int len = arr.length;
int arr_2[][] = new int[len][];
for (int i = ; i < arr_2.length; i++) {
for (int j = ; j < ; j++) {
arr_2[i][j] = -;
}
}
int temp = ;
int k = ;
int arr_2_index = ;
for (int i = ; i < len; i++) {
if (arr[i] == arr[k]) {
temp++;
if (i != len - )
continue;
}
arr_2[arr_2_index][] = arr[k];
arr_2[arr_2_index][] = temp;
arr_2_index++;
temp = ;
k = i;
if (i != len - )
i--;
}
return arr_2;
} public static int[][] sort_2(int arr_2[][]) {
int len = arr_2.length;
for (int i = ; i < len; i++) {
for (int j = ; j < len - i - ; j++) {
if ((arr_2[j][] < arr_2[j + ][])
|| (arr_2[j][] == arr_2[j + ][] && arr_2[j][] > arr_2[j + ][])) {
int temp = arr_2[j][];
arr_2[j][] = arr_2[j + ][];
arr_2[j + ][] = temp;
temp = arr_2[j][];
arr_2[j][] = arr_2[j + ][];
arr_2[j + ][] = temp;
}
}
}
return arr_2;
} public static void display(int arr_2[][]) {
int len = arr_2.length;
for (int i = ; i < len; i++) {
if (arr_2[i][] != -) {
System.out.println(arr_2[i][] + " " + arr_2[i][]);
}
}
}
}

运行结果:

我的实现代码(java):

 package ccf_test2015_03;

 import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner; public class NumberPaixu2 { private static int N ; public static void main(String[] args) { Map map = new HashMap(); Scanner input = new Scanner(System.in); N = input.nextInt(); int[][] number = new int[N][2]; for(int i = 0; i < N; i++){ int key = input.nextInt(); if(map.get(key) != null){ int value = (int) map.get(key); map.replace(key, value, ++value); }else{ map.put(key, 1);
}
}
int count = 0; Iterator entries = map.entrySet().iterator(); while(entries.hasNext()){ Map.Entry entry = (Map.Entry) entries.next(); int key = (int) entry.getKey(); int value = (int) entry.getValue(); number[count][0] = key; number[count++][1] = value;
}
for(int i = 0; i < count-1; i++){ for(int j = 0 ;j < count - i - 1; j++){ if(number[j][1] < number[j + 1][1]){ int[] temp = number[j]; number[j] = number[j + 1]; number[j + 1] = temp; }else if(number[j][1] == number[j + 1][1]){ if(number[j][0] > number[j + 1][0]){ int[] temp = number[j]; number[j] = number[j + 1]; number[j + 1] = temp;
}
}
}
} for(int i = 0; i < count; i++){ System.out.println(number[i][0] + "\t" + number[i][1]);
} } }

运行结果:

CCF系列之数字排序(201503-2)的更多相关文章

  1. CCF CSP 201503-2 数字排序

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-2 数字排序 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到 ...

  2. CCF CSP 201503-2 数字排序 (map+自定义排序)

    题目链接:http://118.190.20.162/view.page?gpid=T26 返回试题列表 问题描述 试题编号: 201503-2 试题名称: 数字排序 时间限制: 1.0s 内存限制: ...

  3. 基于Hadoop 2.6.0运行数字排序的计算

    上个博客写了Hadoop2.6.0的环境部署,下面写一个简单的基于数字排序的小程序,真正实现分布式的计算,原理就是对多个文件中的数字进行排序,每个文件中每个数字占一行,排序原理是按行读取后分块进行排序 ...

  4. SQL SERVER 字符串按数字排序

    需求是这样的: 数据库表里面有一个字段类型是nvachar,存的值是数字和字符混合的,要实现先按数字排序,再按字母倒序. 思路: 考虑这个字段的值是否是有规律可循的,把要按数字排序的部分转换为数字,再 ...

  5. JavaScript按纯数字排序

      直接上代码: var arr=[ {name:"张散步",age:"23",sports:"篮球",number:"23112 ...

  6. php冒泡排序实现方法,传入几个数字排序后 输出实战例子

    php冒泡排序实现方法,传入几个数字排序后 输出实战例子 算法和数据结构是一个编程工作人员的内功.四种入门级排序算法: 冒泡排序.选择排序.插入排序.快速排序. 一.冒泡排序 原理:对一组数据,比较相 ...

  7. mysql将字符串字段转为数字排序或比大小

    SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ...

  8. sort()函数到底是怎样进行数字排序的

    很多人会用sort(),并不见得知道它具体是怎样给数字排序的.其实不知道也行,会用就可以,感兴趣的可以来看看. var numberArray = [2,4,1,3]; numberArray.sor ...

  9. CCF201503-2 数字排序 java(100分)

    试题编号: 201503-2 试题名称: 数字排序 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输 ...

随机推荐

  1. Angular5系列教程:ng-book2-angular-5-r66 土家翻译,话糙理不糙

    嗯, 在工作还辣么忙之时,看了这本书,感觉很不错.想分享给国内朋友们.结合自己的理解和整理加翻译,可能有点糙,但是,话糙理不糙嘛.出系列,不知道会不会弃坑,不立Flag了.持续更新.....我会放在印 ...

  2. Validation of viewstate MAC failed 解决办法

    大部分人都说是在页里或web.config里加EnableEventValidation="false" EnableViewStateMac="false" ...

  3. 可视化编程开发板TurnipBit支持LED亮度可调功能

    微软的makecode编辑器更新至版本v0.12.64.新增LED的可调亮度功能.而作为中文版可视化编程的口袋计算机TurnipBit完全兼容micro:bit,同样支持LED的亮度可调功能. 该项功 ...

  4. 【软件】关于Notepad++(32位)

    1.Notepad++安装包 简介:NotePad++是一个轻量级的代码编辑器,占用内存少,运行速度快. 官网网址:https://notepad-plus-plus.org/ 百度网盘:https: ...

  5. QCanvasItem介绍-QT3

    QCanvasItem类提供一个在QCanvas上的抽象图形对象. 各种QCanvasItem子类提供立即可用的行为.这个类是一个纯粹的抽象超类,它提供了在所有具体的canvas项目类中共享的行为.Q ...

  6. SQLAlchemy基础操作二

    多线程示例 import time import threading from sqlalchemy.ext.declarative import declarative_base from sqla ...

  7. Shell和命令基础

    什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解析器),Shell接收用户输入的命令并把它送入到内核去执行,结构如下图 Shell的功能 Shell最重要的 ...

  8. 14.7.1.2 MySQL创建用户句法

    14.7.1.2 CREATE USER Syntax 单击此处查看原文 以下是MySQL 5.7.6及以上版本的CREATE USER句法 CREATE USER [IF NOT EXISTS] u ...

  9. [转]Python 资源大全中文版

    摘自:https://github.com/jobbole/awesome-python-cn 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesom ...

  10. Spring Boot修改启动端口

    spring boot是个好东西,可以不用容器直接在main方法中启动,而且无需配置文件,方便快速搭建环境.可是当我们要同时启动2个springboot工程时,就会有问题,有可能会因为8080端口被第 ...