求解C语言基础题。

给定一个数组,找到最长平台的长度和位置。查阅资料了解最长平台的意思。... 给定一个数组,找到最长平台的长度和位置。 查阅资料了解最长平台的意思。 展开
 我来答
自我编程
2020-09-29 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

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

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

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

下面是我写的演示代码:

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

#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;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式