问题描述
- 大神们,程序有什么不完善的请加以斧正
-
问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数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("%dn",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特权
解决方案
你的程序不满足
如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
如果输入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("%dn", a[max]);
return 0;
}
解决方案三:
当i=N-1时,a[i+1]下标就出界了
for(i=0;i<N;i++)
{
if(a[i]==a[i+1])//判断是否相等的个数
解决方案四:
数组的定义不能使用变量,只能是常量。
时间: 2024-10-01 01:15:22