今天偶然在网上看到了猫抓老鼠问题,
当时也没多想,只觉得网上给出的程序的确有很多需要改进的地方,
就闷头闷脑的用 循环链表 和 递归 写了一个算法实现,后来发现
这个问题实际上是经典的约瑟夫环问题的变种,那个晕啊。而且有
很多数学的方式来改进。。。。5555。。。
看来算法部分要恶补,嗯嗯。。。
问题:
一、问题描述
现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号。
二、我的解法
N只老鼠成循环链表,从第一只开始,每次隔一个节点,删去一个节点,这样一直删下去,
如果删去的节点的下一个节点已经是链表头了,则将链表头赋值为链表头的下下一个节点,
递归调用删除函数;如果删去的节点的下下一个节点才是链表头,则将链表头赋值为链表头
的下一个节 点, 递归调用删除函数;直至链表头的下下一个节点即是链表头,或链表头的下
一个节点就是链表头,break,输出链表头的编号。(这样做的目的是每次调用删除函数都是从
第一个节点删起。)
三 SOURCE:
// CatMousePro.cpp : Defines the entry point for the console application.
//
#include "stdlib.h"
#include "stdio.h"