找水王

Posted on 2017-04-18 23:18  立木-Six  阅读(103)  评论(0编辑  收藏  举报

思路:因为水王多于一半,所以从头遍历,两个不一样就一起消除,水王太多,一定会被留下。

#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;
}