C语言找众数,我想的好复杂,不知道该怎么想问题,运行结果也不对,就在此基础上,怎么改呀
发布网友
发布时间:2022-04-23 23:38
我来回答
共1个回答
热心网友
时间:2023-10-13 21:46
我首先是要说思路问题:
收集完所有数据后,只保存输入次数的最大值是不够的,还需要判断出输入次数的最小值。只有最大值==最小值的时候才能判断出所有数字的输入次数都一样。
然后是代码格式问题:
很多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;
}