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

来源:互联网 发布:网页游戏php源码 编辑:程序博客网 时间:2024/06/14 07:48

题目描述

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

输入

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

输出

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


代码

#include <iostream>using namespace std;int main(){int n;cin>>n;//表示给定数字的个数。char *p=new char[n];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;}