输入:第一行:一个数n
第二行:n个数(0至10之间),中间有空格隔开
输出:第一行:一个数m
第二行:m个整数,表示输入的第二行中的数字重复的部分
有多个解输出最先出现的一段。
代码如下:
#include <stdio.h>
#define ARRAYSIZE 200
char a[ARRAYSIZE + 10];
int comlen(char *p, char *q);
int main()
{
int N;
int i, j, indexi = 0, indexj = 0;
int maxlen = 0;
scanf("%d", &N);
for (i = 0; i<N; i++)
scanf("%d", &a[i]);
a[i] = '\0';
for (i = 0; i<N; i++)
{
for (j = i+1; j<N; j++)
{
int len = comlen(&a[i], &a[j]);
if (len > maxlen)
{
maxlen = len;
indexi = i;
indexj = j;
}
}
}
printf("%d\n", maxlen);
for (i = indexi; i<maxlen; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
int comlen(char *p, char *q)
{
int len = 0;
while (*p && *q && *p++ == *q++)
len++;
return len;
}
#include <stdio.h>
#define ARRAYSIZE 200
char a[ARRAYSIZE + 10];
int comlen(char *p, char *q);
int main()
{
int N;
int i, j, indexi = 0, indexj = 0;
int maxlen = 0;
scanf("%d", &N);
for (i = 0; i<N; i++)
scanf("%d", &a[i]);
a[i] = '\0';
for (i = 0; i<N; i++)
{
for (j = i+1; j<N; j++)
{
int len = comlen(&a[i], &a[j]);
if (len > maxlen)
{
maxlen = len;
indexi = i;
indexj = j;
}
}
}
printf("%d\n", maxlen);
for (i = indexi; i<maxlen; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
int comlen(char *p, char *q)
{
int len = 0;
while (*p && *q && *p++ == *q++)
len++;
return len;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-01-01
#include "stdio.h"
int main()
{
int i,j;
int n;
int a[100];
int beg,end;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
beg=0;end=1;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[j]!=a[i])
break;
}
if( j-i > end-beg )
{
beg=i;
end=j;
}
i=j-1;
}
printf("%d\n",end-beg);
for(i=beg;i<end;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
大致思路是,输入后扫描数组。
对于每个元素,向后找第一个不同的元素,然后对比长度。
下一次查找相同重复段,可在 j 之后开始,因为 i~j-1 为一个重复段,更长的重复段不可能以 i~j-1为起点。追问
int main()
{
int i,j;
int n;
int a[100];
int beg,end;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
beg=0;end=1;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[j]!=a[i])
break;
}
if( j-i > end-beg )
{
beg=i;
end=j;
}
i=j-1;
}
printf("%d\n",end-beg);
for(i=beg;i<end;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
大致思路是,输入后扫描数组。
对于每个元素,向后找第一个不同的元素,然后对比长度。
下一次查找相同重复段,可在 j 之后开始,因为 i~j-1 为一个重复段,更长的重复段不可能以 i~j-1为起点。追问
我输入
4
1 3 1 3
然后输出的是
1
1
预期输出的是
1
1 3
不过还是谢谢你,先赞同了。
第2个回答 2012-01-02
代码打的时间太长,不过我可以给您提供一个思路:
设置一个足够大的数组:用能够接收空格的函数将你输入的字符全部接收。
可根据空格将字符串分解成不同的字段。之后呢?根据下标相减就晓得那个大了。
之后的格式控制输出相信是一个很简单的问题吧!!!
设置一个足够大的数组:用能够接收空格的函数将你输入的字符全部接收。
可根据空格将字符串分解成不同的字段。之后呢?根据下标相减就晓得那个大了。
之后的格式控制输出相信是一个很简单的问题吧!!!