问题描述:(CCF官网原题)
试题编号: | 201312-1 |
试题名称: | 出现次数最多的数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。 输出格式 输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。 样例输入 6 样例输出 10 |
我的解题思路:
一开始我想要用先排序在选出出现次数最多的方法,后面发现这简直是多此一举,所以采用了一个简单的方法。
就是把要需要选择的第二行数据放到数组里,然后数组的下标就是对应的数字大小,然后数组里每个的值就是该下标数字出现的数字。
所以只需要一个数组b[10001]就可以解决啦
具体代码:
#include <iostream>
using namespace std;//很容易忽略
int main(int argc, char** argv) {
int len;
cin>>len;
int b[10001]={0}; //将数组初始化,可以用循环也可以直接这样
for(int i=0;i<len;i++){ //数组下标是对应的数,然后它的值是出现次数
int j;
cin>>j;
b[j]++;
}
int max=0,ans; //ans是当前出现次数最多的值
for(int i=1;i<10001;i++){
if((b[i]>max)&&(b[i]!=0)){ //由于上面数组下标就是对应的值,所以已经默认从小到大了。
max=b[i];
ans=i;
}
}
cout<<ans<<endl;
return 0;
}
遇到的问题:
由于太久没用c++了,所以遇到了一些语法问题。
(1)我用了cin、cout做输入输出流,但是忘记了在头文件加using namespace std;
(2)定义数组的时候,我甚至用了a[n];这种语句,但是在C++中不允许对数组的大小做动态定义,所以这是错误的