一、题目
二、算法思路
题目要求的是多个数字中出现次数最多的一个,这道题如果采用字典为存储结构的话会更加容易解决,我之前没接触c++的字典结构,就用其他方法来解决一下。
存储结构采用的是数组,有两个数组分别为
number和time
,number
用于存储数字,time
用于存储数组中各个元素出现的次数。
计算各个数字出现次数使用的是双重循环,在计算第i个元素时,就再次在原数组中重判断一遍将该元素出现的次数记录下来
之后就是从中找出次数最大的一个数,以案例中的这十个数
3 2 -1 5 3 4 3 0 3 2
为例,对应的次数如下图,因为相同数字对应的次数是一样的,所以查找时直接遍历time
数组找最大的数和次数即可。
三、代码
//作者:小狐狸
#include<iostream>
using namespace std;
int main(){
int N,i,j;
int number[1002];
cin>>N;
for(i=1;i<=N;i++)
cin>>number[i];
int time[1000]={0};
for(i=1;i<=N;i++){//次数计算
//cout<<time[i]<<endl;
int now = 0;//当前数字出现的次数
for(j=1;j<=N;j++){
if(number[i]==number[j])
now++;
}
time[i]=now;
}
int most = number[1];
int most_number = time[1];
for(i=1;i<=N;i++){//找到出现次数最大的数
//cout<<time[i]<<endl;
if(most_number<time[i]){
most = number[i];
most_number = time[i];
}
}
cout<<most<<" "<<most_number<<endl;
return 0;
}