代码需要使用到STL库中的vector,相关vector的知识先行了解
一.算法实现思想
1.第一层迭代将每个元素赋值给判断元素judgment,第二层迭代依次判断每一个元素是否与判断元素judgment相等,并在count中计数
2.内层迭代结束后,判断count是否大于总元素数量的一半(注意:这里还需要判断这个元素是否和之前的重复,于是用到了element来判断,不然会出现多个输出(如果有更好的方法可以提出)),判断结束后重新将count定义为0
3.如果有元素超过半数,在count1中记录,最后在输出结果时用于判断。
二.实现代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
//判断是否存在某一元素超过半数
void ifmth(vector<int> array){
//迭代器
int count = 0; //作为计数器,记录某一元素在数组中出现的次数
int count1 = 0;//计数器,记录是否有元素超过半数
int element = NULL; //存取超过半数的元素
//第一个迭代更换判断数
//第二个迭代判断是否和判断数相等,并记录到计数器count
for(vector<int>::iterator it=array.begin();it!=array.end();it++)
{
int judgment = *it;
for(vector<int>::iterator it1=array.begin();it1!=array.end();it1++)
{
if(*it1 == judgment)
{
count++;
}
}
if(count>=array.size()/2 && *it != element)
{
count1++;
element=*it;
cout<<"Num counts of "<<*it<<" is great than "<<array.size()/2<<endl;
}
count = 0;
}
if(count1 == 0)
{
cout<<"No element's occurance is greater "<<array.size()/2<<endl;
}
}
int main()
{
cout<<"Please enter array size:";
int n;
int element;
cin>>n;
cout<<endl;
vector<int> array; //使用vector容器
cout<<"Please enter "<<n<<" integers to fill in the array:"<<endl;
for (int i = 0;i < n;i++)
{
cout<<"array["<<i<<"]:";
cin>>element;
array.push_back(element);
}//将输入的元素放入vector
cout<<"The array is:"<<endl;
for (int i = 0;i < n;i++)
{
cout<<array[i]<<" ";
}
cout<<endl;
ifmth(array);
return 0;
}
三.运行结果
四.总结
我的代码水平还处于初级阶段,如果有错误和更好的算法,欢迎提出交流!