问题标题: 酷町堂:1171 最大连续组长度(long)怎么写呀

0
0
已解决
王子健
王子健
初级天翼
初级天翼
#include<iostream>
using namespace std;
int main()
{
    int n,h=1,zs=1,j;
    cin>>n;
    char a[101];
    char zf=a[0];
    for (int i=0; i<n; i++)
        cin>>a[i];
    for (j=0; j<n-1; j++)
    {
        if (a[j]==a[j+1]) h++;
        else if (h>zs)
        {
            zs=h;
            zf=a[j];
            h=1;
        }
    }
    if(a[j]==a[n]) h++;
    else if (h>zs)
    {
        zs=h;
        zf=a[j];
        h=1;
    }
    cout<<zs<<endl;
    cout<<zf<<endl;
}

这段代码有什么问题

望大神告知

为我修正代码

如果对了,我就采纳

一定要准确

谢谢

Thanks♪(・ω・)ノ


0
已采纳
陆姗姗
陆姗姗
资深守护
资深守护

第一点:你的两段elseif的代码部分不对,其他都没问题

else if (h>zs)
    {
        zs=h;
        zf=a[j];
        h=1;
    }

如果这样子写elseif的话是只有当a[j]!=a[j+1]并且h>zs的时候h才被赋值为1,但实际上只要a[j]!=a[j+1]时就需要h=1;

所以无论h>zs是否成立的时候h=1的步骤都是要的

 

第二点:

for (j=0; j<n-1; j++)
    {
        if (a[j]==a[j+1]) h++;
        else if (h>zs)
        {
            zs=h;
            zf=a[j];
            h=1;
        }
    }
    if(a[j]==a[n]) h++;
    else if (h>zs)
    {
        zs=h;
        zf=a[j];
        h=1;
    }

这部分的代码可以简化一下,a[n]不需要单独拿出来比较,直接在for循环里把j的范围改成j<=n-1就可以

0
0
臧启亚
臧启亚
初级光能
初级光能

核心代码

for (int i=0; i<n; i++)
        cin>>a[i];
    for (j=0; j<n-1; j++)
    {
        if (a[j]==a[j+1]) h++;
        else if (h>zs)
        {
            zs=h;
            zf=a[j];
            h=1;
        }
    }
    if(a[j]==a[n]) h++;
    else if (h>zs)
    {
        zs=h;
        zf=a[j];
        h=1;
    }
    cout<<zs<<endl;
    cout<<zf<<endl;

 

0
夏子健
夏子健
初级光能
初级光能

 你第11行有错,j应<n;然后定义一个变量来记录当前下标位置,然后用while,不要用if,再定一个max,把连续长度num-i存储进max;

最后还要把当前循环字母存进x,记住num=0哦

 num=i;
        while(a[i]==a[num])
        {
            num++;
        }
        if(num-i>max)
        {
            max=num-i;
            x=a[i];
            num=0;
        }
 

我要回答