您的位置:首页 > 其它

算法训练 出现次数最多的整数

2015-05-05 13:45 204 查看
时间限制:1.0s   内存限制:512.0MB


问题描述

编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。

输入格式:

第一行是一个整数N,N <= 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。

输出格式:

输出只有一行,即出现次数最多的那个元素值。

输入输出样例

样例输入

5

100

150

150

200

250

样例输出

150

方法

老样子,依旧不是全分,错的地方我这次用VIP特权看了下输入输出,结果是正确的,现在我也不知道是怎么评判,哪里出错了


#include <stdio.h>
#include <stdlib.h>

int main()
{
int n;
scanf("%d", &n);

int *a = (int *)malloc(n * sizeof(int));
int *b = (int *)malloc(n * sizeof(int));
int i, j, t;

for (i = 0; i < n; i++) {
scanf("%d", &t);
for (j = 0; j < n; j++) {
if (a[j] == t) {
b[j]++; //在次数统计数组中向匹配元素位置中加一
continue;
}
}
a[i] = t; //若没有在已有元素中找到匹配项,向数组中添加新元素
}

//下来就是简单的数组中找最大值问题
int k = 0;
for (i = 1; i < n; i++) {
if (b[i] > b[k])
k = i;
else if (b[i] == b[k]) { //顺带处理下元素出现次数一样的问题
if (a[i] < a[k])
k = i;
}
}

printf("%d\n", a[k]);
free(a);
free(b);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 c