首页 > ACM题库 > 九度OJ > 九度-1057-众数[解题代码]
2013
12-12

九度-1057-众数[解题代码]

题目来源:2011年哈尔滨工业大学计算机研究生机试真题

题目描述:

输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。

输入:

测试数据有多组,每组输入20个1-10之间的数。

输出:

对于每组输入,请输出1-10中的众数。

样例输入:
5 1 5 10 3 5 3 4 8 6 8 3 6 5 10 7 10 2 6 2 
样例输出:
5

cpp 代码如下:
#include <stdio.h>
int main(){
        int i,j,max,a[20];
        while(scanf("%d",a)!=EOF){
                int b[11]={0};
        for(i=1;i<20;i++)
                scanf("%d",&a[i]);
        for(i=0;i<20;i++){
                j=a[i];b[j]++;
        }
        max=0;
        for(i=1;i<11;i++)
                if(b[i]>max) {max=b[i];j=i;}
printf("%d\n",j);
        }
return 0;
}
/**************************************************************
	Problem: 1057
	User: coder
	Language: C++
	Result: Accepted
	Time:0 ms
	Memory:1020 kb
****************************************************************/


  1. int half(int *array,int len,int key)
    {
    int l=0,r=len;
    while(l<r)
    {
    int m=(l+r)>>1;
    if(key>array )l=m+1;
    else if(key<array )r=m;
    else return m;
    }
    return -1;
    }
    这种就能避免一些Bug
    l,m,r
    左边是l,m;右边就是m+1,r;

  2. 第2题,TCP不支持多播,多播和广播仅应用于UDP。所以B选项是不对的。第2题,TCP不支持多播,多播和广播仅应用于UDP。所以B选项是不对的。

  3. [email protected]

  4. 第二块代码if(it != mp.end())应改为if(it != mp.end() && (i+1)!=(it->second +1));因为第二种解法如果数组有重复元素 就不正确