/* * 已知一个已经从小到大排列好的数组,说这个数组中的一个平台(Plateau) * 就是连续的一串相同的元素,并且这一串元素不能再延伸 * 例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台 * 编写程序把这个数组中最长的平台找出来 */ #include<stdio.h> #include<stdlib.h> int find(int *a,int n) { int i=0; //统计当前平台 int count=0; //当前平台的起始位置 int loc=0; //统计最长平台 int max=0; while(i<n) { if(i==0) { loc=i; count++; } else { //还是同一个平台 if(*(a+i)==*(a+i-1)) { count++; } //不是同一个平台 else { if(count>max) { max=count; loc=i-count; } count=1; } } i++; } //最大平台可能在数组末尾取得 if(count>max) { max=count; loc=i-count; } printf("最长平台起始于数组下标:%d\n",loc); printf("最长平台包括的元素个数:%d\n",max); return *(a+loc); return 0; } int main() { int a[]={1,2,2,3,3,3,4,5,5,6,6,6,6}; int n=sizeof(a)/sizeof(a[0]); int element=find(a,n); printf("最长平台对应的元素:%d\n",element); return 0; }