大家不会的题还是得在网上看看大佬们的代码,这道题的输出本来我是常规方法,直到我看到了一位大佬的输出方法,不得不说真的是太妙了!既排序还输出了。
问题描述
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出,次数相同时先输出值较小的数。
输入说明
输入的第一行包含一个整数n,表示给定数字的个数。 1 ≤ n ≤ 1000。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。给出的数都是不超过1000的非负整数。
输出说明
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
输入样例
12
5 2 3 3 1 3 4 2 5 2 3 5
输出样例
3 4
2 3
5 3
1 1
4 1
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
typedef struct number{
int num;
int cnt;
}num[1001], t; //建立一个结构
int main()
{
number num[1001], t;
int n, i, j, k;
scanf("%d", &n);
for(i=0;i<1001;i++){
num[i].cnt = 0;//初始化每个数出现次数为0
num[i].num = i;
}
for(i=0;i<n;i++){
scanf("%d", &k);
num[k].cnt++;//输入的数次数加一
}
for(i=1000;i>0;i--){//i为出现的次数,最大为1000,直接进行了排序
for(j=0;j<1001;j++){//从0开始搜索对应的值
if(num[j].cnt==i){//如果出现的次数为i,就输出
printf("%d %d\n", num[j], i);
}
}
}
return 0;
}