求解C语言基础题。

给定一个数组,找到最长平台的长度和位置。 查阅资料了解最长平台的意思。
最新回答
浅夏凉眸

2024-11-30 07:58:55

一、平台:数组中连续相等的元素就是一个平台。

二、最长平台:就是在所有平台中找出最长的那个。

三、方法不止一种,从完整程序思路,至少包含一个实现功能的函数及打印输出的函数。

下面是我写的演示代码:

遍历数组,找出最长平台,返回其在数组中起点和终点位置(返回值是指针数组)。异常直接抛出自行处理。

#include<stdio.h>

#define ML 20

int **findMaxG(int nums[],int len);//找出最长平台,并返回平台起始和结束的位置(指针数组)。异常返回NULL

int showMaxG(int *pMax[2]);//打印输出最长的平台。异常返回0

int main()

{

    int **pMax=NULL;

    int nums[ML]={1,1,2,3,3,3,4,5,6,6,7,7,7,7,8,8,8,9,10,10};

    pMax=findMaxG(nums,ML);

    return !showMaxG(pMax);

}

int showMaxG(int *pMax[2])

{

    int *p0=pMax[0];

    if(pMax[0]==NULL || pMax[1]==NULL || pMax[1]<pMax[0]) return 0;

    printf("最长平台为:");

    while(p0<=pMax[1])

        printf("%d ",*p0++);

    printf("\n");

    return 1;

}

int **findMaxG(int nums[],int len)

{

    static int *pMax[2];

    int n=1,maxn=1,*p0=nums,*p1=nums;

    if(len<=0) return NULL;

    pMax[0]=pMax[1]=nums;

    while(p0<&nums[len-1])

    {

        p1=p0+1;

        while(p1<&nums[len-1])//统计当前平台长度

        {

            if(*p1!=*p0)//开始统计新的平台,之前平台在p1-1处结束

                break;

            else

                n++,p1++;

        }

        if(n>maxn)

            maxn=n,pMax[0]=p0,pMax[1]=p1-1;//记录最大的平台

        p0=p1,n=1;//复位,准备统计下一个平台

    }

    return pMax;

}