思路:因为水王多于一半,所以从头遍历,两个不一样就一起消除,水王太多,一定会被留下。
#include<iostream> using namespace std; #define MAXSIZE 100 typedef struct { int *base; int *top; int stacksize; }SqStack; int InitStack(SqStack &S) { S.base=new int[MAXSIZE]; if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=MAXSIZE; return 0; } int main() { int ID[MAXSIZE],k=0,n; cout<<"输入数组元素:"<<endl; for(int j=0;;j++) { cin>>n; if(n==-1) break; ID[j]=n; k++; } int e; SqStack S; InitStack(S); k=k-1; for(int i=0;i<k;i++) { if(S.top==S.base) { *S.top++=ID[i]; } int num=*(S.top-1); if(num!=ID[i+1]&&i<k-1) { e=*--S.top; i++; } else { *S.top++=ID[i+1]; } if(i==k-2) { num=*(S.top-1); cout<<"出现最多次数的元素:"<<endl; cout<<num<<endl; } } return 0; }