C语言的数组编程题,求大神解答?

如题所述

第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中已统计出现的数字及个数
如果个数不全等,找出最大的个数
再依次判断哪个与最大个数相同,
输出相应数学*/
∥代码略
第3个回答  2019-11-25
C语言实现从一个数组中寻找所有众数,参考代码如下:
#include "stdio.h”
int main()
{
int a[10],n,i,j,k=0;
int t[10],s[10]= {0},c[10]= {0};
int max;
scanf("%d", &n);
if(n<1||n>10)
return 0;
for(i=0; i<n; ++i)
scanf("%d", &a[i]);
for(i=0; i<n; ++i)
if(s[i]==0) {
s[i]=1;
t[k]=a[i];
c[k]++;
for(j=0; j<n; ++j)
if(s[j]==0&&a[i]==a[j]) {
s[j]=1;
c[k]++;
}
k++;
}
max=c[0];
for(i=1; i<k; ++i)
if(max<c[i])
max=c[i];
for(i=0,j=0; i<k; ++i)
if(c[i]==max)
++j;
if(j==k)
printf("NO");
else {
for(i=0; i<k; ++i)
if(c[i]==max)
printf("%d ",t[i]);
}
return 0;
}追答

运行结果如下:

代码从网页版里看,APP里显示不全。

第4个回答  2019-11-25

追问

这个是什么意思

追答

计算元素出现的次数

追问

能再详细一些吗

您的思路

追答

第一个for循环,输入一维数组的元素值,计算元素出现的次数;
第二个for循环,排序;
第三个for循环,找到众数并输出。

本回答被提问者采纳
相似回答