编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150
方法一:
#include<iostream>
#include<string>//****
using namespace std;
int main()
{
int n, i, j, t, max = 1, num = 0;
cin >> n;//输入数据总数
if (n > 0)
{
int* a = new int[n];
for (i = 0; i < n; i++)//输入数组
cin >> a[i];
j = num = a[0];
t = 1;
for(i=1;i<n;i++) //注意从a[1]开始比较
if (a[i] == j)
{
++t; //t用来表示出现的次数
if (t > max) //出现比最大次数还大的次数
{
max = t; //max用来表示出现最多的次数
num = a[i];//num用来表示出现最多的数组元素
}
}
else
{
t = 1;
j = a[i];//将光标向后移看是否有与其相等的数
}
cout << num;
}
return 0;
}
方法二:
#include<iostream>
#include<string>//****
using namespace std;
int main()
{
int n;
cin >> n;
if (n <= 0) return 0;
string* a = new string[n];//建立string型数组
int i;
for (i = 0; i < n; ++i)
cin >> a[i];
string number = a[0];//表示出现最多的元素
int count = 1; //表示出现最多的次数
int flag = 1; //表示出现次数
for (i = 1; i < n; ++i)
{
if (a[i].compare(a[i - 1]) == 0)
flag = flag + 1;
if (a[i].compare(a[i - 1]) == 0 || i == n - 1)
{
if (flag > count)//出现比最大次数还大的次数
{
count = flag;
number = a[i - 1];
}
if(a[i+1].compare(a[i])!=0 && i+1<n)//下一个数和这个数不一样时,flag才清零
flag = 1;
}
}
cout << number << '\n';
return 0;
}
方法三:
上代码:
#include<iostream>
using namespace std;
int main()
{
int* a, * b, n;
cin >> n;
a = new int[n];
b = new int[n];
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n; i++)
{
int ct = 0;
for (int j = 0; j < n; j++)
{
if (a[j] == a[i])
ct++;
}
b[i] = ct;//出现次数
}
int max = 0, * k, m = 0;
k = new int[m];
int r;
for (int i = 0; i < n; i++)
{
if (b[i] > max)
{
max = b[i];
r = i;
}
}
cout << a[r];
}