数字排序201503(C语言版)

问题描述
  给定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 <stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	int a[n], b[n], i, j, k, count=1;
	for(i=0; i<n; i++)
	scanf("%d", &a[i]);
	for(i=0; i<n-1; i++)
	for(j=0; j<n-1-i; j++)
	if(a[j]>a[j+1])
	{
		k = a[j];
		a[j] = a[j+1];
		a[j+1] = k;
	}
	for(i=0; i<n; i++)
	b[i] = 0;
	for(i=0; i<n; i++)
	{
		if(a[i+1]==a[i])
		count++;
		else
		{
			b[i]=count;
			count=1;
		}
	}
	j=0;
	for(i=0; i<n; i++)
	if(b[i]>0) j++;
	while(j)
	{
	    k=0;
	    for(i=0; i<n; i++)
	    if(b[i]>k) k=b[i];
	    for(i=0; i<n; i++)
	    if(b[i]==k)
	    {
	        printf("%d %d\n", a[i], b[i]);
	        b[i]=0; j--;
	    }
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_38196810/article/details/80963121