大神们,程序有什么不完善的请加以斧正

问题描述
  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
  输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
  输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150
#include
int main()
{
int N,i,max=0,sum,ans;
scanf("%d",&N);
int a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
sum=1;
for(i=0;i<N;i++)
{
if(a[i]==a[i+1])//判断是否相等的个数
sum++;//从1计数每个相等数的个数
else
{
if(max<sum)
{
max=sum;
ans=i;
}
sum=1;//重新置1
}
}
printf("%d\n",a[ans]);
return 0;
}
评测点序号 评测结果 得分 CPU使用 内存使用 下载评测数据
1 正确 10.00 0ms 1.597MB 输入 输出
2 正确 10.00 0ms 1.597MB VIP特权
3 正确 10.00 0ms 1.597MB VIP特权
4 正确 10.00 0ms 1.597MB VIP特权
5 正确 10.00 0ms 1.597MB VIP特权
6 错误 0.00 0ms 1.597MB VIP特权
7 错误 0.00 0ms 1.597MB VIP特权
8 正确 10.00 0ms 1.597MB VIP特权
9 正确 10.00 0ms 1.597MB VIP特权
10 正确 10.00 0ms 1.601MB VIP特权

数组的定义不能使用变量,只能是常量。

当i=N-1时,a[i+1]下标就出界了

 for(i=0;i<N;i++)
{
if(a[i]==a[i+1])//判断是否相等的个数 

你的程序不满足
如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
如果输入5 3 3 1 1 2,按理说输出1,结果你输出3

给你写了一个

 #include<stdio.h>
int main()
{
    int N=0, x=0;
    int i;
    scanf("%d",&N);
    int a[20];
    int b[20];
    int n1 = 0;
    for(i=0;i<N;i++)
    {
        scanf("%d", &x);
        int f = 0;
        for (int i = 0; i < n1; i++)
        {
            if (x == a[i]) {b[i]++; f = 1; break;}
        }
        if (!f)
        {
            a[n1++] = x;
            b[n1 - 1] = 1;
        }
    }
    int max = 0;
    for (i = 0; i < n1; i++)
    {
        if (b[i] > b[max]) max = i;
        if (b[i] == b[max] && a[i] < a[max]) max = i;
    }
    printf("%d\n", a[max]);
    return 0;
}