C语言找众数,我想的好复杂,不知道该怎么想问题,运行结果也不对,就在此基础上,怎么改呀

发布网友

我来回答

1个回答

热心网友

我首先是要说思路问题:

收集完所有数据后,只保存输入次数的最大值是不够的,还需要判断出输入次数的最小值。只有最大值==最小值的时候才能判断出所有数字的输入次数都一样。

然后是代码格式问题:

很多for语句和if语句你没有写大括号,还有一些代码3个分号写了一行。这在正规项目中是不允许的,因为增加了写错的可能性,也不便于阅读。

#include <stdio.h>
#define MAXNUM 100+10
int a[MAXNUM+1]={0};
int main()
{
int i,m,t,MAX,n,x, MIN, cmax, cmin; //M指代不明确,改了
int c[MAXNUM]={0};
//输入一组整数
for(i=0;i<MAXNUM;)
{
scanf("%d",&a[i++]);
if(getchar()=='\n')
break;
}
m=i;
MAX=a[0];
MIN=a[0];
//判断众数:统计每个数出现的次数,t出现的次数为c[t] 
for(i=0;i<m;i++)
{
t=a[i]; 
c[t]++;
}
//这段代码目的应该是找出输入数据的最大值,减少后面步骤循环次数吧。
for(i=1;i<m;i++)
{
if(a[i]>MAX)
{
//不需要修改a数组中的输入数据!
MAX = a[i];
}
if (a[i] < MIN)
{
MIN = a[i];
}
}
//输入次数取值范围就是0-m,至于为什么初值要反着来,你可以思考下。
cmax=0;
cmin=m;
//找出c数组中的最大和最小数值。最小数值不能低于1,因为0代表没输入过。
for(i=MIN;i<=MAX;i++) //是小于等于,否则MAX的数据就没了。
{
if(c[i]>cmax)
{
//仍然不懂你为什么要修改c数组
cmax=c[i];
}
if(c[i]<cmin && c[i] != 0)
{
cmin=c[i];
}
}
if(cmax==cmin)
{
printf("没有众数、  \n");
}
else
{
printf("众数为%d \n",cmax);
}
return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com