| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 398 人关注过本帖
标题:求一系列已经排序字符串最大plateau的长度,尝试用递归的方法
只看楼主 加入收藏
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:5 
求一系列已经排序字符串最大plateau的长度,尝试用递归的方法
问题描述:
已知一个从小到大已经排序好的数组(全部都是数字),它的一个plateau就是连续的一串值相同的元素,并且这一串元素不再延伸。例如在 1,2,2,3,3,3,4,5,5,6 中 1, 2.2, 3.3.3, 4, 5.5, 6 都是平台。试着用递归方法,编写一个程序,接受这个数组(指针),把最长平台的长度找出来。例如,上面3.3.3是最长的平台,长度是3。

下面是我写的,谁还有别的算法啊,集思广益啊

程序代码:
#include<stdio.h>

int Exercise1(char *string)
{
    int  n = 1;
    if ('\0' == *string)
    {
        return(0);
    }
    while (*(++string) == *(--string))
    {
        n++;
        string++;
    }
    string++;
    return(n > Exercise1(string) ? n : Exercise1(string));
}

void main()
{
    char *string = "12233345566666";
    fprintf(stdout, "字符串“%s”的最多平台的长度是%d。\n", string, Exercise1(string));
}
搜索更多相关主题的帖子: 字符串 color 元素 
2014-04-11 20:30
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
奇怪,为何总有这种想法。

尽量不用递归思想,况且明显递推简单写,自讨苦吃么?


[fly]存在即是合理[/fly]
2014-04-11 22:07
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
 while (*(++string) == *(--string))


这种代码要不得,会出错


[fly]存在即是合理[/fly]
2014-04-11 22:08
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
回复 3楼 azzbcc
图片附件: 游客没有浏览图片的权限,请 登录注册

这是为什么要递归的原因啦

未知令人期待!
2014-04-12 00:04
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
回复 3楼 azzbcc
这个形式其实是个投机取巧,,,为了省一个变量,,
往后会注意的,,
呃 如果出错了,一般是因为数据访问超出空间吗?

未知令人期待!
2014-04-12 00:06
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
这是其他的一些方法,,,,,



程序代码:
// 函数名称:Answer1
// 函数作用:根据传入的字符串指针,返回最大平台是谁和长度,应用引用传递
// 建立时间:2014年4月11日19:47:34
// 返回值类型:void
// 形式参数:char *, int *, char *
void Answer1(char *string, int *i, char *j)
{
    char *temp = NULL;
    int  n;  // 存放计数次数
    char x;  // 存放当前计数平台

    // 初始化
    temp = string;
    n    = 0;
    x    = *temp;
    *i   = 0;
    *j   = x;

    // 开始判定 一次循环只判定一个
    for (; *temp != '\0'; temp++)
    {
        if (x == *temp)
        {
            n++;
        }
        else
        {            
            n = 1;
            x = *temp;
        }
        if (n > *i)
        {
            *j = x;
            *i = n;
        }
    }
}

// 函数名称:Answer2
// 函数作用:根据传入的字符数组,返回最大平台是谁和长度,应用引用传递
// 建立时间:2014年4月11日19:49:44
// 返回值类型:void
// 形式参数:char *, int *, char *
void Answer2(char *string, int *i, char *j)
{
    char *temp = NULL;
    int  n;

    temp = string;
    n    = 1;
    *i   = 0;
    *j   = *temp;
    
    for (; *temp != '\0'; temp++)
    {
        while (*(++temp) == *(--temp))
        {
            n++;
            temp++;
        }
        if (n > *i)
        {
            *i = n;
            *j = *temp;
        }
        n = 1;
    }
}

// 函数名称:Key
// 函数作用:根据传入的字符串指针,返回最大平台长度
// 建立时间:2014年4月11日19:50:40
// 返回值类型:int
// 形式参数:char *
int Key(char *string)
{
    int  i;
    int  n;
    
    for (i = 0, n = 0; string[n] != '\0'; n++)
    {
        if (string[n] == string[n-i])
        {
            i++;            
        }
    }
    return(i);
}



主函数:
程序代码:
void main()
{
    //char *string = "12233345566666";
    char *string = "    adfdw";

    /*
    int  i;
    char j;
    Answer1(string, &i, &j);
    fprintf(stdout, "字符串“%s”的最多的平台是%c,出现次数是%d。\n", string, j, i);
    */

    fprintf(stdout, "字符串“%s”的最多平台的长度是%d。\n", string, Exercise1(string));
}

未知令人期待!
2014-04-12 00:09
快速回复:求一系列已经排序字符串最大plateau的长度,尝试用递归的方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039127 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved