标题:在网上看到“华为创新杯”的一道题,如下,求大神指点下如何用 C 编写?
只看楼主
夏小柒
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-11-27
结帖率:100%
已结贴  问题点数:20 回复次数:11 
在网上看到“华为创新杯”的一道题,如下,求大神指点下如何用 C 编写?
某省会城市街道纵横交错,为了监控路灯的运行状况,每条街道使用一个数字字符串标识该街道上所有路灯的运行状况。
假设所有路灯只有如下3种状态(分别用数字0,1,2标识,一盏路灯只对应其中一种状态):
0 标志路灯熄灭;
1 标志路灯开启;
2 标志路灯故障;
请根据输入的字符串,找出该街道上连续的处于相同状态的路灯的最大个数。若两种状态的路灯数量相同,则返回最先出现的路灯状态。
输入
街道上连续的路灯组成的状态字符串。字符串中只包含数字,每个路灯的状态为0,1,2中的一种。如“1101”代表4盏路灯,第3盏路灯为熄灭状态,其它3盏为开启状态。
输出
连续为相同状态的路灯最大数量;
上述路灯的状态;
要求:先输出数量,在输出状态,两个整数间采用空格间隔。如输出:53 2
样例输入
112200111
样例输出
3 1
搜索更多相关主题的帖子: 字符串 华为 创新 如何 网上 
2014-04-23 22:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
瞎写的,可能有误,你参考一下

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

int main()
{
    const char* str = "112200111";

    const char* a = str;
    unsigned alen = 0;
    const char* b = str;
    unsigned blen = 1;
    for( const char* p=str+1; ; ++p )
    {
        if( *p == *b )
        {
            ++blen;
            continue;
        }

        if( blen > alen )
            a=b, alen=blen;

        if( !*p )
            break;

        b=p, blen=1;
    }

    printf( "%u %c\n", alen, *a );
    return 0;
}

2014-04-24 08:41
夏小柒
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-11-27
得分:0 
回复 2 楼 rjsp
嗯嗯,谢谢版主!
额,下面是我写的代码,但不知我的思路错在那了,还请版主指点下:
#include <stdio.h>
#include <string.h>
#define N 100
int main()
{
    char lamp[N];
    int num[N];
    int i=0,j=1,k=0,n=0;
    int max;
    printf("input the data:\n");
    scanf("%s",lamp);
    k = strlen(lamp);
    for(;i<k-1;i++)
    {
        if(lamp[i]==lamp[i+1])
            j++;//记录连续灯的个数
        else
        {
        num[n++]=j;//将j转存入num[n]中
        num[n++]=lamp[i];//用num[n]存相同状态灯的数量
        j=1;
        }
    }
    i=0;
    max = num[i];//num[i]存等的状态
        do
        {
            if(max<num[i])
            {
            max=num[i];
            j=i;
            }
            i+=2;
        }while(i<n);
    printf("%d %d",num[j],num[j+1]);
    return 0;
}
2014-04-24 10:14
亦若静汀
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2014-4-23
得分:2 
版主,我刚才运行了一下你写的程序,发现你的输入是已经设定好的,但题目要求的是随便给一串字符串的
2014-04-24 10:38
夏小柒
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-11-27
得分:0 
回复 4 楼 亦若静汀
哦哦,我知道到我的程序连设定好的都不能运行正确,更不会具有一般性,所以求指点
2014-04-25 17:32
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
得分:5 
试着写了一个仅用下标的。
程序代码:
#include <stdio.h>
int main()
{
    char s[500] = "112200111",maxc,c;
    unsigned maxn,n;
    int i;

    //gets(s);
    maxn=n=1;
    maxc=c=s[0];
    for(i=1;s[i];i++ )
    {
        if( s[i] == c )n++;
        else    //出现新状态
        {
            if(n>maxn)
            {
                maxn=n;
                maxc=s[i-1];
            }
            n=1;    //开始统计新状态
            c=s[i];
        }
    }
    if(n>maxn)    //判断最后一组是否最大
    {
        maxn=n;
        maxc=s[i-1];
    }
    printf( "%u %c\n", maxn, maxc );
    return 0;
}


2014-04-25 19:24
dongshimou
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:44
专家分:152
注 册:2014-1-8
得分:3 
滚一遍就是了。记录max 和 tmp 比max大就更新。
2014-04-25 21:57
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
得分:5 
程序代码:
#include <stdio.h>
#include <string.h>
#define MAX 100
void main()
{ // 默认灯泡数量至少是1
    char string[MAX];
    char *p   = string;
    char temp = *string;
    int  max  = 0;
    int  i    = 1;

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

    printf("%d %c", max, temp);    
}


未知令人期待!
2014-04-26 02:30
夏小柒
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-11-27
得分:0 
回复 6 楼 kwxx
O(∩_∩)O谢谢
2014-04-27 13:23
夏小柒
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-11-27
得分:0 
回复 7 楼 dongshimou
嗯嗯
2014-04-27 13:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430549-1-1.html




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

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