问题描述
给定
n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入格式
输入的第一行包含一个整数
n,表示给定数字的个数。
第二行包含 n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
第二行包含 n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
样例输入
12
5 2 3 3 1 3 4 2 5 2 3 5
5 2 3 3 1 3 4 2 5 2 3 5
样例输出
3 4
2 3
5 3
1 1
4 1
2 3
5 3
1 1
4 1
评测用例规模与约定
1 ≤
n ≤ 1000,给出的数都是不超过1000的非负整数。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n, a[1001] = { 0 },b[1000],c[1000] ,i,m,t;//b[n]保存次数,c[n]保存数字 6 cin >> n; 7 m = n; 8 while (m > 0) { 9 cin >> i; 10 a[i]++; 11 m--; 12 } 13 int j = 0; 14 for (int i = 0; i < 1001; i++) { 15 if (a[i] != 0) { 16 b[j] = a[i]; 17 c[j++] = i; 18 } 19 } 20 n = j; 21 for (int i = 0; i < n; i++) { 22 for (int j = i; j < n; j++) { 23 if (b[i] < b[j]) { 24 t = c[i]; 25 c[i] = c[j]; 26 c[j] = t; 27 t = b[i]; 28 b[i] = b[j]; 29 b[j] = t; 30 } 31 if (b[i] == b[j]) { 32 if (c[i] > c[j]) { 33 t = c[i]; 34 c[i] = c[j]; 35 c[j] = t; 36 t = b[i]; 37 b[i] = b[j]; 38 b[j] = t; 39 } 40 } 41 } 42 } 43 for (int i = 0; i < n; i++)cout << c[i]<<" "<<b[i]<<endl; 44 return 0; 45 }