回复 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; }