您的位置:首页 > 其它

CCF-训练50题-NO.3-数字排序问题

2017-11-09 23:28 363 查看

题目描述

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

输入

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

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

输出

输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。



代码

#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;//表示给定数字的个数。
char *p=new char
;
char *print=new char[n*2];
for (int i=0;i<n;i++) {
cin>>p[i];
print[i*2+0]='a';
print[i*2+1]='a';
}
int pointer=0;
for (int i=0;i<n;i++){
int w=0;
int z=0;
for (int j=0;j<=pointer;j++){
if (print[j*2+0]==p[i]) {
print[j*2+1]++;
w++;
}
}

if (w==0){
print[pointer*2+0]=p[i];
print[pointer*2+1]='1';
pointer++;
}
}
for (int i=0;i<pointer+1;i++)
for (int j=i+1;j<pointer+1;j++){
if ((print[i*2+1]<print[j*2+1])||((print[i*2+1]==print[j*2+1])&&(print[i*2+0]>print[j*2+0]))){
char temp1=print[i*2+1];
char temp0=print[i*2+0];
print[i*2+1]=print[j*2+1];
print[i*2+0]=print[j*2+0];
print[j*2+1]=temp1;
print[j*2+0]=temp0;
}
}
for (int i=0;i<=pointer;i++) {
if(print[i*2+0]!='a'){
cout<<print[i*2+0]<<" "<<print[i*2+1]-'0';
if (i<pointer) cout<<endl;
}}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: