狐狸找兔 算法分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了狐狸找兔 算法分析相关的知识,希望对你有一定的参考价值。

题目:

围绕着山顶有10个洞,一只兔子和一只狐狸住在各自的洞里,狐狸总想吃掉兔子,一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10,你从第10洞出发,先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数不限,若能找到我你就可以饱餐一顿,在没找到我之前不能停止,狐狸一想只有10个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件,结果狐狸跑得昏了过去也没找到兔子,请问兔子躲在哪个洞里。程序中可假定狐狸找了1000次。

有两种情况分别对应几种算法,如果狐狸超过界限时,比如狐狸在第九个洞,下次寻找如果要去隔N隔洞时,9+N大于10的情况下,狐狸是回到1洞去找还是,从10洞折返回来,以10,9,8,7的顺序去找,这就对应两种算法

 

第一种 狐狸 回到1比较简单,可以把洞延伸看做 1,2,3,4....8,9,10,1,2,3....8,9,10,1,2,3....这种循环,所以不存在方向性的问题,只需要根据位移对10求余,得到实际位移即可,在狐狸新达到的洞做予标记,下次跳过,并在结果输出时反向筛选得到狐狸无法到达的洞口。

第二种 可以看做是 一个从 1,2,3...7,8,9,10,9,8,7.....,3,2,1这样包含18各元素的数列循环,这样也可以消除方向性带来的麻烦,狐狸可以认为在前面的数列做循环,算法与上方类似。

第三种 就是硬算 定义方向值,求余得到位移。 实际位移是 a+bi  ,i为方向值,值可以为1和-1,b为求余后的位移,a为初始位置

目前能想到的是这些方法

下面贴出 基于第二种方法的 C程序

#include<stdio.h>

void main()
{
	int a[18]={0}; 
	int fox=1;
	int place=0;
	int weiyi,p;
		for(p=0;p<1000;p++)
		{
			weiyi=(p+2)%18;
			place=(place+weiyi)%18;
			if(a[place]==1)
			continue;
			a[place]=1;
	
		}
	
	for(int i=0;i<10;i++)
	{
		if(a[i]==0)
	printf("hole %d is safe\n",i+1);

	}

}

 



以上是关于狐狸找兔 算法分析的主要内容,如果未能解决你的问题,请参考以下文章

在 IOS 中,如何乱序播放音频片段的一部分?

C语言100个经典算法源码片段

以下代码片段的算法复杂度

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]

片段(Java) | 机试题+算法思路+考点+代码解析 2023

pyhton—opencv直线检测(HoughLines)找到最长的一条线