题目描述
在n个数中,找出出现次数最多那个数字,并且输出出现的次数。如果有多个结果,输出数字最小的那一个。
输入
单组数据,第一行数字n(1<=n<=100000)。
接下来有n个数字,每个数字不超过100000000
接下来有n个数字,每个数字不超过100000000
输出
出现次数最多的数字和次数。
示例输入
3 1 1 2
示例输出
1 2
/****************************************************************************勇敢的分割线*******************************************************************************/
#include<stdio.h>
int k[110002][4]={0};int main()
{
int a,b,d,e,bj,zf;
int c;
int max [4]={-1};
scanf("%d",&a);
for(b=0;b<a;b++)
{
zf=1;
scanf("%d",&c);
if(c<0)
{
zf=-1;
c=c*zf;
}
d=c%100000;
bj=d;
e=c/100000;
while(k[d][0]!=0 && (e!=k[d][1] || zf!=k[d][3]))//使数据储存的唯一
d++;
k[d][0]++;//出现的次数
k[d][1]=e;//100000的倍数
k[d][2]=bj;//余数
k[d][3]=zf;//正负
//四个数据共同确定唯一一个数
if(k[d][0]>max[0])
{
max[0]=k[d][0];
max[1]=k[d][1];
max[2]=k[d][2];
max[3]=k[d][3];
}
}
printf("%d %d",(max[1]*100000+max[2])*max[3],max[0]);
return 0;
}
//类似于线性探测再散列