出現次數最多的數C++
阿新 • • 發佈:2019-01-09
試題名稱:出現次數最多的數。
問題描述:給定n個正整數,找出它們中出現次數最多的數。如果這樣的數有多個,請輸出其中最小的一個。
輸入格式:輸入的第一行只有一個正整數n(1<=n<=1000),表示數字的個數。輸入的第二行n個整數,相鄰的數用空格分開。
輸出格式:輸出這n個數中出現次數最多的數。如果這樣的數有多個,輸出其中最小的一個。
樣例輸入:6 10 1 10 20 30 20
樣例輸出:10
#include<iostream>
#include<vector>
#include<algorithm>//sort排序函式要用到
using namespace std;
struct choosen{
int count;//出現的次數
int value;//值
};//記錄某一值出現的次數
int choose(vector<int>& L1);
int main(){
int i;
cin>>i;
vector<int> L1(i);
for(int j=0;j<i;j++)
cin>>L1.at(j);
int answer=choose(L1);
cout<<answer<<endl;
return 0;
}
int choose(vector<int>& L1){
sort(L1.begin(),L1.end());//對L1按從小到大進行排序
choosen T1,T2;//T1用來儲存最終結果,T2用來儲存中間結果
T1.count=0;
T1.value=0;//T1初始化
T2.count=1;
T2.value=L1.front();//T2初始化,從第一個元素開始
for(int i=0;i<L1.size()-1;i++){
if(L1.at(i)==L1.at(i+1))//若相等則次數加一
T2.count++;
else {//如不等則更新T2,而且當前次數大於儲存的次數時更新T1
if(T2.count>T1.count)
T1=T2;
T2.count=1;
T2.value=L1.at(i+1);
}
}
if(T2.count>T1.count)//最後還需更新一次
T1=T2;
return T1.value;
}
主要思路:使用vector容器來儲存輸入的值,對其進行排序。按順序對該容器進行訪問,使用choosen結構體來儲存最終結果。