问题描述:
定义一个数组中,若某个值出现的次数在一半以上,则为执行者。如下数组:
A[8]={1,2,2,4,2,4,2,2} 由于2出现上午次数5次大于5/8>0.5,
所以2为数组A[8]的执行者。
要求:求出数组的执行者,与其对应的下标。
你需要用到的函数:
int administer( int *s,int length)
//实现
定义一个数组中,若某个值出现的次数在一半以上,则为执行者。如下数组:
A[8]={1,2,2,4,2,4,2,2} 由于2出现上午次数5次大于5/8>0.5,
所以2为数组A[8]的执行者。
要求:求出数组的执行者,与其对应的下标。
你需要用到的函数:
int administer( int *s,int length)
//实现
- #include<iostream>
- using namespace std;
- #define NOTEXIST -1
- int administer(int *s, int length)
- {
- int num, index=1, maxsum=1, lmax=0;
- while(index<length)
- {
- if(s[index]==s[lmax+maxsum-1]) { maxsum++; index++; }
- else
- {
- if(maxsum>1) { maxsum--; index++; }
- else if(index+1<length) {lmax=index+1; maxsum=1; index+=2; }
- else {maxsum=0; break;}
- }
- }
- if(maxsum>0) return s[lmax];
- else return NOTEXIST;
- }
- int main()
- {
- int Num[]={1,2,2,4,2,4,2,2};
- //int Num[]={11,5,3,5,5,5,4,5,6,5,8,5,5,7,101,5,8,35,5,9,5};
- //int Num[]={1};
- //int Num[]={4,4,4,4,4};
- //int Num[]={2,2,3,3};
- //int Num[]={0,0,0,1,1};
- cout<<administer(Num,sizeof(Num)/sizeof(int));
- getchar();
- return 0;
- }