1002: 数字排序问题

1002: 数字排序问题

时间限制: 1 Sec   内存限制: 256 MB
提交: 334   解决: 236
[ 提交][ 状态][ 讨论版]

题目描述

给定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

方法一:

#include
using namespace std;
struct A{
	int times;
	int number;
};
int main()
{
	int n;
	cin>>n;
	A a[1000];
	for(int i=0;i>a[i].number;
		a[i].times=1;
	}
	for(int i=1;i0&&temp0&&temp1>a[j-1].times)
		{
			a[j].times=a[j-1].times;
			a[j].number=a[j-1].number;
			j--;
		}
		a[j].times=temp1;
		a[j].number=temp2;
	}
	for(int k=0;k

方法二:

#include
#include
#include
using namespace std;
struct A{
	int times;
	int number;
};
int main()
{
	int n;
	cin>>n;
	A a[n];
	vectoriv(n);   //创建动态数组
	for(int i=0;i>iv[i];
	for(int i=1;i0&&temp0&&temp1>a[j-1].times)
		{
			a[j].times=a[j-1].times;
			a[j].number=a[j-1].number;	
			j--;
		}
		a[j].times=temp1;
		a[j].number=temp2;
	}
	for(int i=0;i



你可能感兴趣的:(2016小学期OJ(C++))