记录【狼追兔子问题】

一只兔子躲进了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;//按先后顺序,将找过洞的序号赋给数组z
        if(!a[x])//判断有没有找过这个洞
        {
            a[x]=1;
        }
        x=x%10+n+1;//计算要找的下一个洞
        if(x>9)//计算一圈过后洞的序号
            x=x%10;
        n++;//间隔洞的个数加1
        if(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");
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值