回复 10楼 御坂美琴
他是通过这一个for (m=0, j=i+1;j<14;j++) 的m=0使每次外循环前都把m归零,使得先前m的值不带入下次循环。想必您有好方法,指点一下吧?
[ 本帖最后由 qhxxbc 于 2010-12-11 16:03 编辑 ]

非计算机专业自学新手向大家请教

程序代码:#include<stdio.h>
void main()
{
int i,j,k;
int a[20]={1,2,3,4,7,7,7,5,7,8,8,5,8,8,9,9,10,11,11,12};
for(i=0;i<=(20-5);i++)
{
for(j=1;j<5;j++)
{
if(a[i]==a[i+j])
k=0;
else
{
k=1;
break;
}
}
if(k==0)
{
printf("有连续5个%d\n",a[i]);
break;
}
}
if(k!=0)
printf("没有连续相等的5个数字!\n");
}
感觉基本上都能满足你的要求,你换不同的数运行下试试看,不行再讨论…

程序代码:#define TYPE char
/*
从数组s中查找连续n个 相同的数据(类型为TYPE), 最多查找size个数据
返回 第一次查到的 那个元素的 地址 ;或者 NULL指针(没有要求的数据)
*/
TYPE *
fun (const TYPE *s, unsigned int size, unsigned int n)
{
const TYPE *s1, *s2, *end;
const TYPE *walk, *end2;
if ((n-- < 2)) return (TYPE*)s;
s1 = s;
end = s +size -1;
for ( ; ; )
{
if ((s2 = s1+n) > end) break;
walk = s2;
while ((--walk >= s1) && (*walk == *s2)){ }
if ((walk < s1))
return (TYPE*)s1;//可以去掉这句
s1 = walk + 1;
walk = s2;
if ((end2 = s1 + n) > end)
break;
while ((++walk <= end2) && (*walk == *s2)){ }
if ((walk > end2))
return (TYPE*)s1;
s1 = walk;
}
return (TYPE*)NULL;
}