猫 老鼠 人的编程题

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求:

1.要有联动性,老鼠和主人的行为是被动的。 
2.考虑可扩展性,猫的叫声可能引起其他联动效应。

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象 
评分标准: 构造出Cat、Mouse、Master三个类,并能使程序运行(2分) 
从Mouse和Master中提取抽象(5分) 
联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)

public interface Observer 

   void Response(); //观察者的响应,如是老鼠见到猫的反映 

public interface Subject 

  void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠 

public class Mouse : Observer 

  private string name; 
  public Mouse(string name, Subject subj) 
  { 
    this.name = name; 
    subj.AimAt(this); 
  }

  public void Response() 
  { 
    Console.WriteLine(name + " attempt to escape!"); 
  } 

public class Master : Observer 

  public Master(Subject subj) 
  { 
    subj.AimAt(this); 
  }

  public void Response() 
  { 
    Console.WriteLine("Host waken!"); 
  } 
}

public class Cat : Subject 

  private ArrayList observers; 
  public Cat() 
  { 
    this.observers = new ArrayList(); 
  } 
  public void AimAt(Observer obs) 
  { 
    this.observers.Add(obs); 
  } 
  public void Cry() 
  { 
    Console.WriteLine("Cat cryed!"); 
    foreach (Observer obs in this.observers) 
    { 
      obs.Response(); 
    } 
  } 

class MainClass 

  static void Main(string[] args) 
  { 
    Cat cat = new Cat(); 
    Mouse mouse1 = new Mouse("mouse1", cat); 
    Mouse mouse2 = new Mouse("mouse2", cat); 
    Master master = new Master(cat); 
    cat.Cry(); 
  } 
}

//---------------------------------------------------------------------------------------------

设计方法二: 使用event -- delegate设计.. 
public delegate void SubEventHandler(); 
public abstract class Subject 

  public event SubEventHandler SubEvent; 
  protected void FireAway() 
  { 
    if (this.SubEvent != null) 
    this.SubEvent(); 
  } 

public class Cat : Subject 

  public void Cry() 
  { 
    Console.WriteLine("cat cryed."); 
    this.FireAway(); 
  } 

public abstract class Observer 

  public Observer(Subject sub) 
  { 
    sub.SubEvent += new SubEventHandler(Response); 
  } 
  public abstract void Response(); 

public class Mouse : Observer 

  private string name; 
  public Mouse(string name, Subject sub) : base(sub) 
  { 
    this.name = name; 
  } 
  public override void Response() 
  { 
    Console.WriteLine(name + " attempt to escape!"); 
  } 

public class Master : Observer 

  public Master(Subject sub) : base(sub){} 
  public override void Response() 
  { 
    Console.WriteLine("host waken"); 
  } 

class Class1 

  static void Main(string[] args) 
  { 
    Cat cat = new Cat(); 
    Mouse mouse1 = new Mouse("mouse1", cat); 
    Mouse mouse2 = new Mouse("mouse2", cat); 
    Master master = new Master(cat); 
    cat.Cry(); 
  } 
}

时间: 2024-10-13 16:12:24

猫 老鼠 人的编程题的相关文章

搜狐2016研发工程师编程题

1.[编程题]马戏团 搜狐员工小王最近利用假期在外地旅游,在某个小镇碰到一个马戏团表演,精彩的表演结束后发现团长正和大伙在帐篷前激烈讨论,小王打听了下了解到, 马戏团正打算出一个新节目“最高罗汉塔”,即马戏团员叠罗汉表演.考虑到安全因素,要求叠罗汉过程中,站在某个人肩上的人应该既比自己矮又比自己瘦,或相等. 团长想要本次节目中的罗汉塔叠的最高,由于人数众多,正在头疼如何安排人员的问题.小王觉得这个问题很简单,于是统计了参与最高罗汉塔表演的所有团员的身高体重,并且很快找到叠最高罗汉塔的人员序列.

网易2017秋招编程题集合-牛客网

网易2017秋招编程题集合-牛客网 链接:https://www.nowcoder.com/questionTerminal/0147cbd790724bc9ae0b779aaf7c5b50来源:牛客网 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如: {1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列. 现在给出一个数字序列,允许使用一

POJ C++程序设计 编程题#9:人群的排序和分类

编程题#9:人群的排序和分类 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 对人群按照输入的信息进行排序和分类. #include <iostream> #include <set> #include <iterator> #include <algorithm> using namespace std; // 在此处补

POJ C程序设计进阶 编程题#6:流感传染

编程题#6:流感传染 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染.请输出第m天得流感的人数. 输入 第一行一个数字n,n不超过100,表示有n*n的宿舍房

[编程题-搜狐]马戏团

[编程题]马戏团 搜狐员工小王最近利用假期在外地旅游,在某个小镇碰到一个马戏团表演,精彩的表演结束后发现团长正和大伙在帐篷前激烈讨论,小王打听了下了解到, 马戏团正打算出一个新节目“最高罗汉塔”,即马戏团员叠罗汉表演.考虑到安全因素,要求叠罗汉过程中,站在某个人肩上的人应该既比自己矮又比自己瘦,或相等. 团长想要本次节目中的罗汉塔叠的最高,由于人数众多,正在头疼如何安排人员的问题.小王觉得这个问题很简单,于是统计了参与最高罗汉塔表演的所有团员的身高体重,并且很快找到叠最高罗汉塔的人员序列. 现在

[编程题-搜狐]扎金花

[编程题] 扎金花 两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 . 游戏规则: 共52张普通牌,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张: 每人抓三张牌.两人比较手中三张牌大小,大的人获胜. 对于牌型的规则如下: 1.三张牌一样即为豹子 2.三张牌相连为顺子(A23不算顺子) 3.有且仅有两张牌一样为对子 豹子>顺子>对子>普通牌型 在牌型一样时,比较牌型数值大小(如AAA>KKK,QAK>534,QQ2

我给女朋友讲编程-题外话系列(1)--害怕过七夕,不知道买什么礼物

我女朋友在外地出差,平常能够做的就是打打电话,聊聊天. 下周六就是中国的情人节了. 说实话,也许你们觉得七夕很浪漫,但是我是有一点小恐惧,因为不知道送什么礼物给女朋友好.以前给女朋友送过一些礼物,尽管精心准备,有时难免留有遗憾. 不管怎么说,又是一次情人节,我还是需要精心准备一下,于是花时间来搜索礼物,另外也请朋友们给我出一点建议. 下面是我搜到的一些礼物,想看大图片的朋友可以单击小标题.请大家给点建议. 1, 戒指 曾经在网上买了两对情侣戒指,还刻上了双方名字首字母,满心欢喜送出去,女朋友收到

小米2015笔试编程题

小米2015笔试编程题 1.[编程题] 懂二进制 时间限制:1秒 空间限制:32768K 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子1: 1999  2299 输出例子1: 7 分析:第一步求这两个数的异或,得到一个新的数,相同位是0,不同位是1:第二步采用位运算求这个数里边1的个数即为结果 1 class Solution { 2 public: 3 /** 4 * 获得两个整形二进制表达位数不同的数量 5

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需