一只兔子躲进了10个环形分布的洞中的一个。狼在第一个洞中没有找到兔子,就隔一个洞,到第3个洞去找;也没有找到,就隔2个洞,到第6个洞去找;以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中?
#include<stdio.h>
void main()
{int n=1,x=0,o=0,p=0,B=0,i=0,a[10]={0};unsigned char z[100]={0};//n为间隔洞数 x为洞的序号 o为循环体个数 p为比对成功的个数 B为找到循环节的标志位//i为临时变量 数组a为兔子洞 数组z为按先后顺序排列找过洞的序号while(B!=1){z[i++]=x;//按先后顺序,将找过洞的序号赋给数组zif(!a[x])//判断有没有找过这个洞{a[x]=1;}x=x%10+n+1;//计算要找的下一个洞if(x>9)//计算一圈过后洞的序号x=x%10;n++;//间隔洞的个数加1if(i==100)//将储存洞序号的数组最后一位置一,用以判断数组储存完毕{z[99]=1;}while(z[99]==1&&B!=1)//判断几位是一个循环{o++;if(z[o]==0&&o>0){for(i=0;i<50;i++){if(z[i]==z[i+o]){++p;if(p==o){B=1;break;}}if(p<i+1){p=0;break;}}} }}printf("数组z的前八十位为:\n");for(i=0;i<80;i++){if(i>0&&i%20==0)printf("\n");printf("%2d ",z[i]);}printf("\n循环节为:\n");for(i=0;i<o;i++){printf("%2d ",z[i]);}printf("\n十个洞被找过的情况为:\n");for(i=0;i<10;i++){printf("%3d",a[i]);}printf("\n");
}