第1个回答 2019-11-26
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int *array;
int n,i,j,z,s=0,q=0;
int result[10]={0}; //存放众数
printf("请输入数组元素数量\r\n");
printf("n=");
scanf("%d",&n);
array=(int *)malloc(n*sizeof(int));
printf("请输入数组元素\r\n");
printf("array=");
for(i=0;i<n;i++)
{
scanf("%d",&array[i]);
}
for(i=0;i<n;i++)
{
z=0;
for(j=i;j<n;j++) //计数出当前数据出现的次数
{
if(array[i]==array[j])
{
z++;
}
}
printf("z=%d\r\n",z);
if(z>=n/2) //如果当前元素的数量超过了数组大小的一半不用往下分析了
{
result[q]=array[i];
break;
}
else if(z>s)
{
memset(result,0,10);
q=0;
result[q]=array[i];
s=z;
}
else if(z==s)
{
result[++q]=array[i];
}
}
printf("Sample Output:\r\n");
if(((q+1)*s!=n)&&(q<5)) //按理来说10个数据众数应该不会超过4个,而前半部分避免了出现的次数相同
{
for(j=0;j<=q;j++) //打印出结果
{
printf("%d\r\n",result[j]);
}
}
else //如果没有就输出一个NO
printf("NO\r\n");
free(array);
return 0;
}
第2个回答 2019-11-25
定义2个数组,
第一个一维数组iData[100],
记录输入的每个数字。
第二个二维数组iTongji[100][2],
……∥输入部分略,N是个数
for(i=0; i<N; i++) ∥初始化
iTongji[i][0]=iTongji[i][1]=0;
for(i=0,iOK=0; i<N; i++)
{
for(j=0 ,iFound=0; j<iOK; i++)
if(iData[i]==iTongji[j][0])
{ iTongji[j][1]++;
iFonud=1;
break;
}
if(iFound=0)
{ iTongji[iOK][0]=iData[i];
iTongji[iOK][1]=1;
iOK++;
}
}
/*iTongji中已统计出现的数字及个数
如果个数不全等,找出最大的个数
再依次判断哪个与最大个数相同,
输出相应数学*/
∥代码略