标题:等值数列段
只看楼主
Daybreak0
Rank: 1
等 级:新手上路
帖 子:14
专家分:8
注 册:2010-4-7
 问题点数:0 回复次数:6 
等值数列段




等值数列段

如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。

输入:
        由N个元素组成的整数数列A(其中N<=50)

输出:
        A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出No equal number list.

说明:
        始末位置是指数组下标,即0表示第一个元素。
        如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。
        当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。







帮忙,看下错拿了


#include<stdio.h>
main()
{
    int k=0,n,i,j=0,max=0,m[50],a[50];
    scanf("%d",&n);
    for(;k<n;k++)
        scanf("%d",a);
    for(i=0;i<49;i++)
        if(a[i]==a[i+1]) j++;
        else
            if(m[i]<i) m[i]=i,i=0;
    for(i=0;i<50;i++)
        if(max<a[i])    max=a[i];
    if(j==0)
        printf("No equal number list.\n");
    else
        printf("The longest equal number list is from %d to %d.\n",max-j,max)
搜索更多相关主题的帖子: 等值 
2010-04-08 15:37
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
得分:0 
听你说的
好像是数据结构里面的KMP算法?
2010-04-08 22:37
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
得分:0 
搞错了
这不是KMP算法
这比那简单

首先语法错误
printf("The longest equal number list is from %d to %d.\n",max-j,max)

另外
你的m【】数组应该是还没有赋值吧
2010-04-08 22:45
Daybreak0
Rank: 1
等 级:新手上路
帖 子:14
专家分:8
注 册:2010-4-7
得分:0 
回复 3楼 亚小南
改过来了,
但是结果差的太多了!
2010-04-08 22:49
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
得分:0 
回复 4楼 Daybreak0
如果可以的话
希望你可以把注释后的程序贴在后面
我可以帮你看看
2010-04-08 23:11
Daybreak0
Rank: 1
等 级:新手上路
帖 子:14
专家分:8
注 册:2010-4-7
得分:0 
回复 5楼 亚小南
那麻烦你了~
这是我改的

我看明白了,是算法出错了,但我能力有限,改不明白,还请你帮忙。
#include<stdio.h>
main()
{
    int k=0,n,i,j=0,p,max=0,m[50]={0},a[50];
    scanf("%d",&n);
    for(;k<n;k++)
        scanf("%d",&a[k]);                                                        先读如数据。
    for(i=0;i<k-2;i++)                                                            用前一个数和后一个比较,j表示有连续相等数的个数,m【i】
        if(a[i]==a[i+1])           j++,m[i]=j;                                    存j,用p记住i的值。
            if(a[i+1]!=a[i+2])      j=0,p=i;
        else
            if(a[i+1]!=a[i+2])    m[i]=0;
    for(i=0;i<k-1;i++)
        if(max<m[i])    max=m[i];                                                比较出j的大小,确定出最长的。
    if(j==0)
        printf("No equal number list.\n");                                                   
    else
        printf("The longest equal number list is from %d to %d.\n",p-max,p);
}
2010-04-09 14:08
Daybreak0
Rank: 1
等 级:新手上路
帖 子:14
专家分:8
注 册:2010-4-7
得分:0 
终于想明白了

#include<stdio.h>
main()
{
    int k=0,n,i,j=0,p,max=0,m[50]={0},a[50];
    scanf("%d",&n);
    for(;k<n;k++)
        scanf("%d",&a[k]);
    for(i=0;i<k-1;i++)
        if(a[i]==a[i+1])
        {
            j++,m[i]=j;
            if(a[i+1]!=a[i+2])    j=0;
        }
        else                m[i]=0;
    for(i=0;i<k-1;i++)
        if(max<m[i])    max=m[i],p=i;
    if(max==0)
        printf("No equal number list.\n");
    else
        printf("The longest equal number list is from %d to %d.\n",p-max+1,p+1);
}
2010-04-09 14:49



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




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

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