1. 程式人生 > >C語言(23)眾數問題

C語言(23)眾數問題

描述

所謂眾數,就是對於給定的含有N個元素的多重集合,每個元素在S中出現次數最多的成為該元素的重數,

多重集合S重的重數最大的元素成為眾數。例如:S={1,2,2,2,3,5},則多重集S的眾數是2,其重數為3。

現在你的任務是:對於給定的由m個自然陣列成的多重集S,計算出S的眾數及其重數。

輸入

第一行為n,表示測試資料組數。(n<30)
每組測試的第一行是一個整數m,表示多重集S中元素的個數為m
接下來的一行中給出m(m<100)個不大於10萬的自然數
(不會出現不同元素出現的次數相同的情況,如:S={11,11,22,22,33,33})。

輸出

每組測試資料輸出一行,包含兩個數,第一個是眾數,第二個是其重數,中間以空格隔開。

樣例輸入

1
6
1 2 2 2 3 5

樣例輸出

2 3
#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  

void sort(int buf[], int len)
{
	int i,j,k;

	for(i=0; i<len-1; i++){
		k=i;
		for(j=i+1; j<len; j++){
			if(buf[k]>buf[j]){
				k=j;
			}
		}
		if(k != i){
			buf[k]=buf[k]^buf[i];
			buf[i]=buf[k]^buf[i];
			buf[k]=buf[k]^buf[i];
		}
	}
}

int main()  
{  
	int i, j, k, max, n, m, len,  buf[100], buf1[100], buf2[100];

	scanf("%d", &n);
	while(n--){
		bzero(buf, sizeof(buf));
		bzero(buf1, sizeof(buf1));
		bzero(buf2, sizeof(buf2));

		scanf("%d", &m);
		for(i=0; i<m; i++){
			scanf("%d", &buf[i]);
		}

		len=i;
		sort(buf,len);  

		j=0;
		for(i=0; i<len; i++){
			k=i;
			buf2[j]=buf[i];
			while(buf[k] == buf[i]){
				buf1[j]++;
				i++;
			}
			//printf(": %d 2:%d \n", buf1[j], buf2[j]);
			i--;
			j++;
		}
		max=0;
		for(i=1; i<j; i++){
			if(buf1[max]<buf1[i]){
				max=i;
			}
		}
			
		printf("%d %d\n", buf2[max], buf1[max]); 
	} 
	return 0;  
}