狐狸与兔子问题

刚刚看道编程题:

围绕着山顶有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号洞里。

posted @ 2005-01-13 00:58  张旋  阅读(2403)  评论(3编辑  收藏  举报