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; }
相关文章推荐
- CCF-训练50题-NO.16-字符串数字置换
- CCF-训练50题-NO.4-相邻数对问题
- CCF-训练50题-NO.6-字符串匹配问题
- CCF-训练50题-NO.7-日历问题
- CCF计算机职业资格认证数字排序问题
- CCF-训练50题-NO.1-数塔问题
- CCF-训练50题-NO.9-约瑟夫问题
- 数字去重排序问题
- CCF-训练50题-NO.13-数码管
- CCF-训练50题-NO.30-蛇形矩阵
- Oracle 数字与空值的排序问题
- MySQL字符串中数字排序的问题
- CCF-训练50题-NO.25-组个最小数
- CCF-训练50题-NO.10-恺撒Caesar密码
- 数列中不含1,将含有1的数字全部去掉(管理员不喜欢1,1排序问题)
- Oracle 数字与空值的排序问题
- CCF-训练50题-NO.26-在霍格沃茨找零钱
- ccf 数字排序
- MySQL字符串中数字排序的问题
- 一个返回json对象的问题 key 为数字时 会默认从小到大进行排序