C语言编程,求众数

描述
所谓众数,就是出现次数最多的数。

输入
共两行,第一行:N,第二行N个数。
第二行共n个数。
输出
一个整数,就是出现众数的次数。
样例输入
5
1 2 2 5 4样例输出
2

我的程序:
#include<stdio.h>
#include<string.h>

int main(void)
{
int i,j,k,n,max=0;
scanf("%d",&n);
int a[n],A[n];
memset(a,0,sizeof(a));
memset(A,0,sizeof(A));
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
A[a[i]]++;
//printf("%d ",A[a[i]]);
}
for(j=0;j<n;j++)
if(A[j]>max)
{
max=A[j];
k=j;
}
printf("%d",k);
}
我在网站测试时显示Runtime Error,什么原因
哪里错了,请指教,指出错误,最好帮我修改到正确,
最好是比如:1 2 2 4 4
能够显示 2 4
谢谢!

第1个回答  2012-01-01
int a[n],A[n];
不能这样定义的吧。。。
A[a[i]]++;
这句有问题!
若输入的a[i]大于n,则超出了A的下标范围
访问数组超范围的下标,就会Runtime Error。。。追问

那能帮我改下代码吗?谢谢!

本回答被网友采纳
第2个回答  2012-01-01
至于众数,我觉得最好的方法是用bfs。但这个对你来说难度有点大,我就给你写一个hash表吧。还用上面的那个数组,且假定数组a中的最大值不超过10000,若
第3个回答  2012-01-01
(1)"int a[n],A[n]"定义有问题,定义一个数组,应该用常量制定数组的长度,而不是变量
(2)"A[a[i]]++";如果a[i]是一个很大很大的数,就会超出数组的范围,出现错误追问

那能帮我改下代码吗?谢谢!

第4个回答  2012-01-01
int a[n],A[n];
声明时的数组大小不能为变量,一定要为常数追问

那能帮我改下代码吗?谢谢!

相似回答