C语言:程序对一个数组进行统计,把出现次数最多的那个数组元素值打印出来。

编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
这是我写的代码:
#include <stdio.h>
int main()
{
int n,a[25]={0},b[25]={0},x,y,z,i,j,t,k,m,l;
scanf("%d",&n);
if(n==1)
{
scanf("%d",&k);
printf("%d",k);
}
if(n==2)
{
scanf("%d",&m);
scanf("%d",&l);
if(m>=l) printf("%d",l);
else printf("%d",m);
}
if(n>=3)
{
for(x=1;x<n;x++)
{
scanf("%d\n",&a[x]);
}
for(y=1;y<=n;y++)
{
for(z=y+1;z<=n;z++)
{
if(a[z]==a[y]) b[y]=b[y]+1;
else continue;
}
}
t=0;
a[0]=0;
b[0]=0;
l=a[n-1];
for(i=0;i<=n;i++)
{
if(b[i]>t&&a[i]<=l)
{
t=b[i];
k=a[i];
l=a[i];
}
else continue;
}
printf("%d",k);
}
}
输入个别数组结果不正确,求纠错

这一块其实不用分这么多种情况,只要分数组元素是1和不是1的情况就行。

(1)数组元素个数为1,直接输出输入元素

(2)数组元素个数不为1,记录每个数字的个数,并与最多个数进行比较,只有大于最多个数,才进行记录。

程序可以是这样:

#include<stdio.h>
using namespace std;
int main()
{
int N;
scanf("%d\n",&N);
int arr[25];
for(int i = 0;i<N;i++)
{
scanf("%d",&arr[i]);
}
if(N == 1)
{
printf("%d\n",arr[0]);
}
else
{
int maxCount = 0;
int curCount = 1;
int targetNum = 0;
for(int i = 0;i<N-1;i++)
{
if(arr[i] == arr[i+1])
{
curCount++;
}
else
{
if(curCount > maxCount)
{
maxCount = curCount;
targetNum = arr[i];
}
curCount = 1;
}
}
printf("%d\n",targetNum);
}
return 0;
}

程序在附件中,下图是运行结果。


温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网