1. 程式人生 > >藍橋杯-演算法訓練-出現次數最多的整數

藍橋杯-演算法訓練-出現次數最多的整數

     演算法訓練 出現次數最多的整數    問題描述
  編寫一個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數N也是由使用者輸入的,最多不會超過20。然後程式將對這個陣列進行統計,把出現次數最多的那個陣列元素值打印出來。如果有兩個元素值出現的次數相同,即並列第一,那麼只打印比較小的那個值。
  輸入格式:第一行是一個整數 NN £ 20;接下來有 N行,每一行表示一個整數,並且按照從小到大的順序排列。
  輸出格式:輸出只有一行,即出現次數最多的那個元素值。
輸入輸出樣例
樣例輸入 5
100
150
150
200
250 樣例輸出 150
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main()
{
	int n,max=1,num=1;    //max出現最多次的數的出現次數 
	cin >> n;
	int digital[20];
	vector<int> number;   //存放不同數字出現的個數
	for (int i = 0; i < n; i++)
		cin >> digital[i];
	for (int i = 1; i < n; i++)
	{
		if (digital[i-1] == digital[i])
		{
			num++;
		}
		else if(digital[i-1]!=digital[i])
		{
			if (max < num)
				max = num;
			number.push_back(num);
			num = 1;
		}
		if (digital[i - 1] == digital[i] && i == n - 1)
		{
			if (max < num)
				max = num;
			number.push_back(num);
		}
		if(digital[i-1]!=digital[i]&&i==n-1)    
		{
			if (max < num)
				max = num;
			number.push_back(num);
		}
	}
	for (int i = 0; i < number.size(); i++)
	{
		if (number[i] == max)
		{
			int a = 0;           //出現最多次數的位置,把前面不同的數的出現次數加起來獲得
			for (int j = 0; j < i; j++)
				a += number[j];
			cout << digital[a] << endl;
			break;
		}
	}
	return 0;
}