c++编程猫吃老鼠的问题

Python017

c++编程猫吃老鼠的问题,第1张

#include <stdio.h>

void GetLastMouse(int nType, int nCount, int nMouse[], int &nLastMouse)

{// nType--0表示吃的是奇数,1偶数;nCount--老鼠的总数;

// nMouse--所有老鼠的序号数组;nLastMouse最后一只老鼠

int nAllIndex = 0  // 总老鼠的索引

int nLifeIndex = 0 // 活着的老鼠的索引

int nLife = 0 // 活着的老鼠

int nLifeCount = 0 // 活着的老鼠总数

for(nAllIndex = 0 nAllIndex < nCount nAllIndex++)

{ // 获取所有活着的老鼠数量,保存最后一只活着的老鼠的索引

if (0 != nMouse[nAllIndex])

{

nLifeCount++

nLife = nAllIndex

}

}

if (1 == nLifeCount) // 如果活着的老鼠只剩一只了,返回

{

nLastMouse = nMouse[nLife]

return 

}

for (nAllIndex = 0, nLifeIndex = 0 nAllIndex < nCount && nLifeIndex < nLifeCount nAllIndex++)

{

if (0 != nMouse[nAllIndex] ) // 还没被吃

{

if (nType == nLifeIndex % 2) // 并且处在被吃位置上

nMouse[nAllIndex] = 0 // 0表示被吃

nLifeIndex++

}

}

GetLastMouse(nType, nCount, nMouse, nLastMouse) // 递运算

}

void main()

{

int nArray[] = {1,2,3,4,5,6,7,8,9,10}

int nLastMouse = 0 // 最后一只老鼠

GetLastMouse(0, 10, nArray, nLastMouse)

printf("最后一只老鼠的首次编号是:%d\n", nLastMouse)

}

设N为老鼠数目,L为那只幸运老鼠的位置

2^x | N

--------------------------------

2^0 | 2

2^1 | 3 4

2^2 | 5 6 7 8

2^3 | 9 10 11 12 13 14 15 16

.....................................

上面2^x 中x表示第x行,2^x表示该行有多少个数,这些数就是N,比如N=12,相应的N在第3行 即2^x <N <= 2^(x+1)

所以,log(2,N)-1<= x <log(2,N) 且x 为int型

最后公式为: L= (N-2^x)*2 也就是说,找到一个最大的x使得2的x次最接近切小于N,然后套用公式L就是那个值至于程序怎么写,我想不用多说了吧?毕竟还是学过C语言的吧。

using System

namespace CatMouseMaster

{

/// <summary>

/// 房屋

/// </summary>

public class House

{

public Cat Cat

{

get

{

return this.cat

}

}

public Mouse[] Mouses

{

get

{

return this.mouses

}

}

public Master Master

{

get

{

return this.master

}

}

public string Place

{

get

{

return this.place

}

}

private Cat cat

private Mouse[] mouses

private Master master

private string place

public House(string place, string master, string cat, params string[] mouses)

{

this.place = place

Console.WriteLine("在{0}旁边有一栋房子", this.Place)

this.master = new Master(master, this)

this.cat = new Cat(cat, this)

if (mouses != null)

{

this.mouses = new Mouse[mouses.Length]

for(int i = 0i <mouses.Lengthi++)

{

this.mouses[i] = new Mouse(mouses[i], this)

}

}

}

/// <summary>

/// 应用程序的主入口点。

/// </summary>

[STAThread]

static void Main(string[] args)

{

House house = new House("白宫", "布什", "汤姆", "杰瑞", "莱姆", "强尼", "布莱克", "劳伦斯", "杰克", "汉克斯", "巴克", "萨姆", "山姆", "克里斯", "伍德")

house.Night()

Console.ReadLine()

}

public void Night()

{

Console.WriteLine("\n一天晚上")

this.Cat.MiaoMiao()

}

}

public delegate void CatMiaomiaoEventHandler(Cat cat, EventArgs args)

public delegate void MouseRunEventHandler(Mouse mouse, EventArgs args)

public delegate void TroubleByMouseEventHandler(Master master, Mouse mouse, EventArgs args)

public delegate void MouseCatchdEventHandler(Cat cat, Mouse mouse, EventArgs args)

public class Life

{

public string Name

{

get

{

return name

}

}

public House House

{

get

{

return this.house

}

}

private string name

private House house

public Life(string name, House house)

{

this.name = name

this.house = house

}

}

public class Cat : Life

{

public static event CatMiaomiaoEventHandler Miao

public Cat(string name, House house)

: base(name, house)

{

Console.WriteLine("{0}养了一只小猫,名字叫做{1}", this.House.Master.Name, this.Name)

}

public void MiaoMiao()

{

Console.WriteLine("小猫{0}大叫一声:\"喵~~~~~\"", this.Name)

if (Cat.Miao != null)

{

Cat.Miao(this, EventArgs.Empty)

}

}

public void CatchMouse(Mouse mouse)

{

Console.WriteLine("小猫{0}抓住了老鼠{1}", this.Name, mouse.Name)

mouse.CatchdByCat(this)

}

}

public class Mouse : Life

{

public static int RunNum

{

get

{

return runNum

}

}

private static int runNum = 0

private static int prefixFlag = 0

public static event MouseRunEventHandler Run

public event MouseCatchdEventHandler Catchd

public Mouse(string name, House house)

: base(name, house)

{

if (prefixFlag == 0)

{

Console.Write("房子里面有许多老鼠,它们是:")

prefixFlag = 1

}

else

{

Console.Write(",")

}

Console.Write(this.Name)

Cat.Miao += new CatMiaomiaoEventHandler(Cat_Miao)

this.Catchd += new MouseCatchdEventHandler(Mouse_Catchd)

}

private void Cat_Miao(Cat cat, EventArgs args)

{

Console.WriteLine("老鼠{0}吱吱的说:\"{1}来了,咱们快逃!\"", this.Name, cat.Name)

runNum++

if (Run != null)

{

Mouse.Run(this, EventArgs.Empty)

}

}

public void CatchdByCat(Cat cat)

{

if (Catchd != null)

{

Catchd(cat, this, EventArgs.Empty)

}

}

private void Mouse_Catchd(Cat cat, Mouse mouse, EventArgs args)

{

Console.WriteLine("老鼠{0}对小猫{1}说:\"我现在瘦骨伶仃的,等我长肥了你再来吃我吧\"", this.Name, cat.Name)

}

}

public class Master : Life

{

public Master(string name, House house)

: base(name, house)

{

Console.WriteLine("住在这里的主人是{0}", this.Name)

Mouse.Run += new MouseRunEventHandler(Mouse_Run)

this.Troubled += new TroubleByMouseEventHandler(Master_Troubled)

}

public event TroubleByMouseEventHandler Troubled

private void Mouse_Run(Mouse mouse, EventArgs args)

{

if (Mouse.RunNum <5)

{

return

}

this.TroubledByMouse(mouse)

}

public void TroubledByMouse(Mouse mouse)

{

if (Mouse.RunNum == 5)

{

Console.WriteLine("主人{0}被惊醒了", this.Name)

Console.WriteLine("{0}大叫一声:\"吵死了啦!\"", this.Name)

}

else

{

Console.WriteLine("{0}大声吼道:\"{1},快起来干活,不抓住第{2}只老鼠{3}我就把你扔到野外去!\"", this.Name, this.House.Cat.Name, Mouse.RunNum, mouse.Name)

if (this.Troubled != null)

{

this.Troubled(this, mouse, EventArgs.Empty)

}

}

}

public void OrderCatToCatchMouse(Cat cat, Mouse mouse)

{

cat.CatchMouse(mouse)

}

private void Master_Troubled(Master master, Mouse mouse, EventArgs args)

{

this.OrderCatToCatchMouse(this.House.Cat, mouse)

}

}

}

编译后的结果:

在白宫旁边有一栋房子

住在这里的主人是布什

布什养了一只小猫,名字叫做汤姆

房子里面有许多老鼠,它们是:杰瑞,莱姆,强尼,布莱克,劳伦斯,杰克,汉克斯,巴克,萨姆,

山姆,克里斯,伍德

一天晚上

小猫汤姆大叫一声:"喵~~~~~"

老鼠杰瑞吱吱的说:"汤姆来了,咱们快逃!"

老鼠莱姆吱吱的说:"汤姆来了,咱们快逃!"

老鼠强尼吱吱的说:"汤姆来了,咱们快逃!"

老鼠布莱克吱吱的说:"汤姆来了,咱们快逃!"

老鼠劳伦斯吱吱的说:"汤姆来了,咱们快逃!"

主人布什被惊醒了

布什大叫一声:"吵死了啦!"

老鼠杰克吱吱的说:"汤姆来了,咱们快逃!"

布什大声吼道:"汤姆,快起来干活,不抓住第6只老鼠杰克我就把你扔到野外去!"

小猫汤姆抓住了老鼠杰克

老鼠杰克对小猫汤姆说:"我现在瘦骨伶仃的,等我长肥了你再来吃我吧"

老鼠汉克斯吱吱的说:"汤姆来了,咱们快逃!"

布什大声吼道:"汤姆,快起来干活,不抓住第7只老鼠汉克斯我就把你扔到野外去!"

小猫汤姆抓住了老鼠汉克斯

老鼠汉克斯对小猫汤姆说:"我现在瘦骨伶仃的,等我长肥了你再来吃我吧"

老鼠巴克吱吱的说:"汤姆来了,咱们快逃!"

布什大声吼道:"汤姆,快起来干活,不抓住第8只老鼠巴克我就把你扔到野外去!"

小猫汤姆抓住了老鼠巴克

老鼠巴克对小猫汤姆说:"我现在瘦骨伶仃的,等我长肥了你再来吃我吧"

老鼠萨姆吱吱的说:"汤姆来了,咱们快逃!"

布什大声吼道:"汤姆,快起来干活,不抓住第9只老鼠萨姆我就把你扔到野外去!"

小猫汤姆抓住了老鼠萨姆

老鼠萨姆对小猫汤姆说:"我现在瘦骨伶仃的,等我长肥了你再来吃我吧"

老鼠山姆吱吱的说:"汤姆来了,咱们快逃!"

布什大声吼道:"汤姆,快起来干活,不抓住第10只老鼠山姆我就把你扔到野外去!"

小猫汤姆抓住了老鼠山姆

老鼠山姆对小猫汤姆说:"我现在瘦骨伶仃的,等我长肥了你再来吃我吧"

老鼠克里斯吱吱的说:"汤姆来了,咱们快逃!"

布什大声吼道:"汤姆,快起来干活,不抓住第11只老鼠克里斯我就把你扔到野外去!"

小猫汤姆抓住了老鼠克里斯

老鼠克里斯对小猫汤姆说:"我现在瘦骨伶仃的,等我长肥了你再来吃我吧"

老鼠伍德吱吱的说:"汤姆来了,咱们快逃!"

布什大声吼道:"汤姆,快起来干活,不抓住第12只老鼠伍德我就把你扔到野外去!"

小猫汤姆抓住了老鼠伍德

老鼠伍德对小猫汤姆说:"我现在瘦骨伶仃的,等我长肥了你再来吃我吧"