摘自《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 &lt; n; i++)

    {
        scanf("%d", &a[i]);
    }

    temp = a[0] - 1;

    num = 1;
    for(i = 0; i &lt; n; i++)
    {
        if(temp != a[i])
        {
            temp = a[i];
            if(max_num &lt; 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 &lt; n; i++)
    {
        if(x[i] == x[i - length])
        {
            length++;
        }
    }
    return length;
}