试题名称: 数字排序
时间限制: 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.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的非负整数。
用了二叉排序树和插入排序
#include<iostream>
using namespace std;
class Node{
public:
int num;
int data;
};
class TNode{
public:
int num;
int data;
TNode* leftChild;
TNode* rightChild;
TNode(){
data = -1;
num = 1;
leftChild = NULL;
rightChild = NULL;
}
void add(){
num++;
}
};
class Tree{
private:
TNode* top;
Node *s;
int size;
int i;
public:
Tree(){
top = NULL;
s = NULL;
size = 0;
}
void Insert(int num){
if(top==NULL){
top = new TNode();
top->data = num;
size++;
}
else{
TNode* s = top;
int c = -1;
do{
if(num > s->data){
c = 1;
}
else if(num < s->data){
c = 0;
}
else{
c = 2;
}
switch(c){
case 0:
if(s->leftChild != NULL){
s = s->leftChild;
}
else{
s -> leftChild = new TNode();
s -> leftChild -> data = num;
size++;
return;
}
break;
case 1:
if(s->rightChild != NULL){
s = s->rightChild;
}
else{
s -> rightChild = new TNode();
s -> rightChild -> data = num;
size++;
return;
}
break;
case 2:
s -> add();
return;
default:
break;
};
}while(s!=NULL);
}
}
//插入排序
void InsertSort(Node *a,int n){
int i=0,j;
Node temp;
for(;++i<n;){
for(j=i;--j>=0;){
if(a[j+1].num>a[j].num){
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
else{
while(j>=0 && a[j+1].num==a[j].num && a[j+1].data<a[j].data){
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
j--;
}
break;
}
}
}
}
void Pre_Sq(TNode *t){
if(t){
s[i].data = t->data;
s[i].num = t->num;
i++;
Pre_Sq(t->leftChild);
Pre_Sq(t->rightChild);
}
}
void display(){
int i = -1;
for(;++i<size;){
cout<<s[i].data<<" "<<s[i].num<<endl;
}
}
void Pre(){
if(top!=NULL){
i = 0;
s = new Node[size];
Pre_Sq(top);
InsertSort(s,size);
}
}
};
int main(){
Tree t;
int n,m;
cin>>n;
while(n--){
cin>>m;
t.Insert(m);
}
t.Pre();
t.display();
return 0;
}