如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。
输入:
由N个元素组成的整数数列A(其中N<=50)
输出:
A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出No equal number list.
说明:
始末位置是指数组下标,即0表示第一个元素。
如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。即:当在一个LIST中出现两个等长的连续串时,答案应该是第一个等长串。
测试输入 | 期待的输出 | ||||
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| |||
测试用例 2 | 以文本方式显示
| 以文本方式显示
| |||
测试用例 3 | 以文本方式显示
| 以文本方式显示
| |||
测试用例 4 | 以文本方式显示
| 以文本方式显示
|
#include <stdio.h>
void seekend(int *s,int *i,int *c)
{
while(*s++==*s) { (*c)++;(*i)++;}
}
void seek(int *p,int *x,int *y,int *c,int i,int n)
{
int X,Y,C,I;
if(i<n)
if(*p++==*p)
{
C=2;X=i;I=i+1;seekend(p,&I,&C);
Y=I;p+=C-2;
if(*c<C) { *x=X;*y=Y;*c=C;}
seek(p,x,y,c,I,n);
}
else seek(p,x,y,c,++i,n);
}
main()
{
static int n,a[50],i,start,end,count=1;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
seek(a,&start,&end,&count,0,n-1);
if(count==1) printf("No equal number list.\n");
else printf("The longest equal number list is from %d to %d.\n",start,end);
}
没有初始化的指针不能使用,函数间的非指针变量可以通过变量的地址传递值