西户网|西户社区网|官网|户县网站新闻!

西户网/西户社区网(官网)
户县本土 便民 公益 互助  XHUME.CC

 找回密码
 注册会员

扫描二维码登录本站

搜索
查看: 4509|回复: 1

猫吃老鼠的系统化算法

[复制链接]
发表于 2008-12-11 10:35:59 | 显示全部楼层 |阅读模式

欢迎访问西户网/西户社区网 XHUME.CC

您需要 登录 才可以下载或查看,没有账号?注册会员

x
  1. 一、问题描述
  2.   现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号。

  3.   二、问题求解

  4.   我们假设有N个老鼠,序号依次为1,2,3,......,N-1,N,并且按序号先后以顺时针围成一圈。

  5.   老鼠信息的结构定义如下,使用双向列表,如下:

  6. typedef struct MouseNode
  7. {
  8.   int nNO;
  9.   MouseNode *pNext;
  10.   MouseNode *pPre;
  11.   MouseNode() { nNO = 0; pNext = NULL; pPre = NULL; }
  12.   MouseNode(int NO) { nNO = NO; pNext = NULL; pPre = NULL; }
  13. }MouseNode;

  14.   我的算法只有一个函数,这个函数完成吃一圈老鼠。传入的参数是双向链表中本次要吃掉的第一个老鼠,返回值是下一圈吃老鼠时要第一个吃掉的老鼠。

  15.   函数代码如下:

  16. // CatEatMouses
  17. /*
  18. 本函数只吃一圈老鼠,循环调用它来吃完老鼠
  19.   参数    本次要吃掉的老鼠
  20.   返回    下一圈吃老鼠时候要吃的第一个老鼠
  21.         若返回值为空,则说明老鼠已经吃完了
  22. */
  23. MouseNode *CatEatMouses(MouseNode *pStartMouse)
  24. {
  25.   MouseNode *pFirst = pStartMouse;
  26.   MouseNode *pFirstNotEatMouse = pFirst->pNext;
  27.   if(pFirst == pFirstNotEatMouse)
  28.   {
  29.     printf("%d ", pFirst->nNO);
  30.     return NULL; // 吃完了
  31.   }
  32.   bool bCanEat = true;
  33.   while (true)
  34.   {
  35.     if(pFirst == pFirstNotEatMouse)
  36.     {
  37.       if(bCanEat)
  38.       {
  39.         return pFirstNotEatMouse;
  40.       }
  41.       else
  42.       {
  43.         return pFirstNotEatMouse->pNext;
  44.       }
  45.     }
  46.     if(bCanEat)
  47.     {
  48.       pFirst->pPre->pNext = pFirst->pNext;
  49.       pFirst->pNext->pPre = pFirst->pPre;
  50.       printf("%d ", pFirst->nNO);
  51.       pFirst = pFirst->pNext;
  52.       bCanEat = false;
  53.     }
  54.     else
  55.     {
  56.       pFirst = pFirst->pNext;
  57.     }
  58.   }
  59. }三、演示函数
复制代码
发表于 2008-12-11 10:45:12 | 显示全部楼层
:L 看不懂
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

西户网/西户社区网 XHUME.CC 版权所有  陕ICP备11003684号  

本站信息均由会员发表,不代表西户立场,如侵犯了您的权利请发帖投诉【网站营业执照公示】

平平安安

本站信息均由会员发表,不代表西户网/西户社区网 XHUME.CC 立场,如侵犯了您的权利请===>>>发帖投诉

陕公网安备 61012502000141号

快速回复 返回顶部 返回列表