摘自《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;
}
转载于:https://blog.51cto.com/charlesxie/780684