给定 n 个整数,请统计出每个整数出现的次数,按出现次数从多到少 的顺序输出。

问题描述
给定 n 个整数,请统计出每个整数出现的次数,按出现次数从多到少
的顺序输出。
输入格式
输入的第一行包含一个整数 n,表示给定数字的个数。
第二行包含 n 个整数,相邻的整数之间用一个空格分隔,表示所给定
的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的
次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则
先输出值较小的,然后输出值较大的。(1 ≤ 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

思路:

1.将所有数字排序

for(i=1;i<n;i++){ 
		for(j=i;j>0&&array[j]<array[j-1];j--){ 
			temp=array[j];
			array[j]=array[j-1];
			array[j-1]=temp;
		}
	}

2.统计次数

result[0][0]=array[0];
	result[0][1]=1;
	count=0; 
	for(i=1;i<n;i++){ 
		if(array[i]==result[count][0]){ 
			result[count][1]++;
		}else{ 
			count++;
			result[count][0]=array[i];
			result[count][1]=1;
		}
	}

3.对次数进行排序

	for(i=1;i<=count;i++){ 
		for(j=i;j>0&&result[j][1]>result[j-1][1];j--){ 
			temp=result[j][0];
			result[j][0]=result[j-1][0];
			result[j-1][0]=temp;
			
			temp=result[j][1];
			result[j][1]=result[j-1][1];
			result[j-1][1]=temp;
		}
	}

具体代码如下:

/* 问题描述 给定 n 个整数,请统计出每个整数出现的次数,按出现次数从多到少 的顺序输出。 输入格式 输入的第一行包含一个整数 n,表示给定数字的个数。 第二行包含 n 个整数,相邻的整数之间用一个空格分隔,表示所给定 的整数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的 次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则 先输出值较小的,然后输出值较大的。(1 ≤ 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>
int main(void){
int n;
int i,j,temp,count;
printf("请输入数字个数:");
scanf("%d",&n);
int array[n];
int result[n][2];
//输入数据
printf("请输入数据:");
for(i=0;i<n;i++){
scanf("%d",&array[i]);
}
//对数字排序
for(i=1;i<n;i++){
for(j=i;j>0&&array[j]<array[j-1];j--){
temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
}
}
//统计次数
result[0][0]=array[0];
result[0][1]=1;
count=0;
for(i=1;i<n;i++){
if(array[i]==result[count][0]){
result[count][1]++;
}else{
count++;
result[count][0<%

点赞