摘自《C语言名题精选百则》
题目:已知一个已经从小到大排好列的数组,说这个数组中的一个平台(Plateau),就是连续一串值相同的元素,并且这一串元素不能再延伸。例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台。试编写一个程序,接受一个数组,把这个数组中最长的平台找出来,在上面的例子中3.3.3是该数组的最长的平台。
我当时写的程序是下面这样的(结尾附上书中给的大牛写的参考):
#include <stdio.h>
#define N 100
int main(int argc, char *argv[]) { int max_num = -1, num, temp; int i; int a[N]; int n;scanf("%d", &n);
for(i = 0; i < n; i++)
{ scanf("%d", &a[i]); }temp = a[0] - 1;
num = 1; for(i = 0; i < n; i++) { if(temp != a[i]) { temp = a[i]; if(max_num < num) { max_num = num; num = 1; } } else { num++; } }printf("%d\n", max_num);
return 0; }
/*本段程序来自David Greis,The Scientce of Programming 书中*/
int longest_plateau(int x[], int n)
{ int length = 1; int i; for(i = 1; i < n; i++) { if(x[i] == x[i - length]) { length++; } } return length; }