c语言求众数的调用函数 如何用c语言求众数

用C语言找众数

1、先将数组a[N]排序(增序、降序都可以)

成都创新互联公司服务项目包括甘州网站建设、甘州网站制作、甘州网页制作以及甘州网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,甘州网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到甘州省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

2、从a[i++]开始统计,若相等则计数器b[j++],如此重复。

3、在b[N]查找最大数max,并记录max在b[N]中的索引imax

4、设置标志flag = 1,若满足(b[i] == max i != imax),则flag = 0

5、若falg = 0,返回-1,否则返回b[imax]

#include stdio.h

#include stdlib.h

#include time.h

const int N = 10;

void Sort(int a[],int n) {

int i,j,k,t;

for(i = 0; i  n- 1; ++i) {

k = i;

for(j = i + 1; j  n; ++j) {

if(a[k]  a[j]) k = j;

}

if(i != k) {

t = a[i];

a[i] = a[k];

a[k] = t;

}

}

}

void Show(int a[], int n) {

int i;

for(i = 0; i  n; ++i)

printf("%d ",a[i]);

printf("\n");

}

int main(){

int i,m,flag,imax;

int a[N],b[N];

srand((unsigned)time(NULL));

for(i = 0; i  N; ++i) // 生成数组元素序列

a[i] = rand()%(1 * N); 

Sort(a,N);

Show(a,N);

b[0] = 1;

for(i = 1,m = 0; i  N; ++i) { // 统计各种大小数的个数

if(a[i] == a[i - 1]) ++b[m];

else b[++m] = 1;

}

++m;

imax = 0;

for(i = 1; i  m; ++i) { // 查找"众数"的个数

if(b[i]  b[imax])

imax = i;

}

flag = 1;

for(i = 0; i  m  flag; ++i) // 是否存在众数?

if(b[i] == b[imax]  i != imax)

flag = 0;

printf("%d\n",flag ? b[imax] : -1);

return 0;

}

如何用c语言求众数

#includestdio.h

int main ()

{ int n,i,j,t,max=0,a[1000][2]={0};

scanf("%d",n);

for(i=0; in; i++)

scanf("%d",a[i][0]);

//   printf("OK\n");

for(i=0; in-1; i++)

for(j=0; jn-1-i; j++)

if(a[j][0]a[j+1][0])

{ t=a[j][0];

  a[j][0]=a[j+1][0];

  a[j+1][0]=t;

}

for(i=0; in;)

{ a[i][1]=1;

for(j=i+1; a[j][0]==a[i][0]; j++)

a[i][1]++;

if(a[i][1]max)max=i;

i=j;

}

for(i=0; in; i++)

if(a[i][1]==a[max][1])

  printf("%d ",a[i][0]);

return 0;

}

c语言求编程:众数

数组排序可以不用指针。你把数组定义成全局变量,比如说a[10001];然后调用我给你的快排程序就行了,这个程序可以背下来,很有用的。

void qs(int L,int R)

{

int i=L,j=R,mid=a[(L+R)/2],t;

while(ij)

{

while(a[i]mid) ++i;

while(a[j]mid) --j;

if(i=j)

{

t=a[i]; a[i]=a[j]; a[j]=t;

++i; --j;

}

}

if(iR) qs(i,R);

if(Lj) qs(L,j);

}

排好序之后找中位数就好办了。

至于众数,我觉得最好的方法是用bfs。但这个对你来说难度有点大,我就给你写一个hash表吧。还用上面的那个数组,且假定数组a中的最大值不超过10000,若超过,你把下面这个hash数组的范围扩大就行了。

另外,设a中有n个元素,a从1开始计数(若从0开始,你改一下就好了)

int hash[10001]=;

int i,Max=0;

for(i=1; i=n; ++i)

{

++hash[a[i]];

if(hash[a[i]]hash[Max]) Max=a[i];

}

最后输出Max就好了

刚t415422663倒是提醒我了,如果要判断众数有多个,我可以把上面的程序稍改一下

int hash[10001]=;

int i,Max=-1;/*注意,这里把Max赋值为-1是为了防止数组a的元素个数为0时所有数据都被输出*/

for(i=1; i=n; ++i)

{

++hash[a[i]];

if(hash[a[i]]Max]) Max=hash[a[i]];

}

//10000是数组a中可能出现的最大值,这个你可以自己改的

for(i=1; i=10000; ++i)

if(hash[i]==Max) printf("%d\n",i);

你的串号我已经记下,采纳后我会帮你制作

C语言编程,求众数

int a[n],A[n];

不能这样定义的吧。。。

A[a[i]]++;

这句有问题!

若输入的a[i]大于n,则超出了A的下标范围

访问数组超范围的下标,就会Runtime Error。。。


分享文章:c语言求众数的调用函数 如何用c语言求众数
文章链接:http://myzitong.com/article/dochhio.html