刚刚看道编程题:
围绕着山顶有10个洞。一只兔子和一只狐狸各住一个洞。狐狸要吃兔子。兔子对狐狸说:“你想吃掉我可以,但必须找到我。我就藏身于这十个洞中,你从10号洞出发,先到1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,……,以后依次类推,若能找到我,可饱餐一顿。”。狐狸答应了,但是狐狸从早到晚进进出出了1000次,仍没找到兔子。请编程求兔子究竟躲在哪个洞里。
下面是我写的C#算法:
using System;
namespace ConsoleApplication3
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
//[STAThread]
static bool[] rabbitInCave=new bool[10]; //10个洞里有没有兔子
static void SetRabbitInCave(int caveNumber) //设定哪个洞里有兔子
{
for(int i=0;i<10;i++)
{
rabbitInCave[i]=false;
}
rabbitInCave[caveNumber]=true;
}
static int GetCaveNumber(int biggerCaveNumber)//得到正确的洞的编号
{
return biggerCaveNumber % 10;
}
static bool TestCave()//测试1000次内能否找到兔子
{
int stepADD=0;
int caveNumber=9;
for(int i=0;i<=1000;i++)
{
if(rabbitInCave[caveNumber])
return true;
stepADD+=1;
caveNumber=GetCaveNumber(caveNumber+stepADD);
}
return false;
}
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
/* 围绕着山顶有10个洞。一只兔子和一只狐狸各住一个洞。
* 狐狸要吃兔子。兔子对狐狸说:“你想吃掉我可以,但必
* 须找到我。我就藏身于这十个洞中,你从10号洞出发,
* 先到1号洞找我,第二次隔一个洞找我,第三次隔两个洞找
* 我,……,以后依次类推,若能找到我,可饱餐一顿。”。
* 狐狸答应了,但是狐狸从早到晚进进出出了1000次,仍没找
* 到兔子。请编程求兔子究竟躲在哪个洞里。
* */
for(int i=0;i<10;i++)
{
SetRabbitInCave(i);
if(!TestCave())
Console.WriteLine("兔子可能在{0}号洞里。",i+1);
}
}
}
}
|
运行,得到结果,兔子可能在2,4,7,9号洞里。