试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 样例输出 3 4 评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 |
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
int input[1005];
int output[1005][2];
int main()
{
// freopen("D:\\Desktop\\tom.txt","r",stdin);
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>input[i];
int sum=0,length = 1;
output[0][0] = input[0];
int flag = 0;
for(int i=1;i<n;i++)
{
flag = 1;
for(int j=0;j<length;j++)
if(output[j][0]==input[i])
flag = 0;
if(flag)
{
output[length][0] = input[i];
length++;
}
}
/* for(int i=0;i<length;i++)
cout<<output[i][0]<<" ";
cout<<"\n";
*/
for(int j=0;j<length;j++)
{
for(int i=0;i<n;i++)
if(input[i]==output[j][0])
sum++;
output[j][1] = sum;
sum = 0;
}
for(int i=0;i<length;i++)
input[i] = output[i][1];
sort(input,input+length);
/* for(int i=0;i<length;i++)
cout<<input[i]<<" ";
cout<<"\n";
*/
for(int i=0;i<length/2;i++)
{
int temp = input[i];
input[i] = input[length-1-i];
input[length-1-i] = temp;
}
for(int j=0;j<length;j++)
{
for(int i=0;i<length;i++)
if(output[j][1]==output[i][1]&&output[j][0]>output[i][0]&&j<i)
{
int temp = output[j][0];
output[j][0] = output[i][0];
output[i][0]= temp;
}
}
for(int j=0;j<length;j++)
{
for(int i=0;i<length;i++)
if(output[i][1]==input[j])
{
cout<<output[i][0]<<" "<<output[i][1]<<endl;
output[i][1] = input[0]+10;
}
}
return 0;
}