留的作业:
农场一头小母牛,
每年生头小母牛,
母牛五岁产母牛,
二十年上多少牛?

马老师给的这个问题我个人感觉不太好理解,就按照我自己的理解吧,我把题目给白话文一下:
农场中引进一只超级母体牛,它每年都可以生一只普通小牛,而它生下的普通小牛到5岁的时候会
生下一只普通小牛,以后就不会再生。问这个农场20年后有多少只牛(包括超级母牛)?

分析问题,这是一个群体繁衍的问题,一定要在每个年份判断清楚谁该生谁不该生。

首先我们要确定主角,肯定是牛了,所以我们设计一个Cow类来代表牛类:

Cow.java:

package cn.edu.OOtest;public class Cow {private int age;public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

里面有一个age属性,是用来记录牛的年龄的,这样我们就可以清楚的知道哪头牛5岁了该生牛犊了。

确定了实体类,我们下面来设计生长算法(下面用母体代指超级母牛):
1.首先,母体每年都要生牛犊
2.其次,每过一年所有普通牛(除母体)都涨一岁
3.再次,每一只普通牛到5岁就会出生一只年龄为0的牛犊
4.最后,限制条件,除母体每年生一只牛外,普通牛一生只有5岁时生牛犊

为了统计方便,我决定将所有牛放在"牛圈"里(List集合中),新生牛犊就add。

我写的代码:

package cn.edu.OOtest;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class CowProductTest {public static void main(String[] args) {Cow cowParent=new Cow();//这是母体cowParent.setAge(-1);//年龄是-1为了区分母体,因为它每年都生孩子List<Cow> cowList=new ArrayList<Cow>();//list集合,相当于牛圈cowList.add(cowParent);//将母体装入牛圈int year=0;while(year<20){year++;for(int i=0;i<cowList.size();i++){Cow cow=cowList.get(i);if(cow.getAge()!=-1){//非母体的所有牛都涨一岁cow.setAge(cow.getAge()+1);}if(cow.getAge()==5){//有牛长到5岁,就生出一只新的牛Cow cowSon=new Cow();cowSon.setAge(0);//刚出生的牛的年龄为0周岁cowList.add(cowSon);}}//下面是母体每年必生的一只牛Cow cowSon=new Cow();cowSon.setAge(0);//刚出生的牛的年龄为0周岁cowList.add(cowSon);}System.out.println("二十年后共有"+cowList.size()+"只牛");}
}

运行结果:二十年后共有57只牛

我们来手算一下这段程序是否正确:
我把year<20改成year<6,也就是6年后是多少,程序运行后是8只牛,下面手算一下:
第一年:母牛一只,新生小牛一只(0岁),共2只
第二年:母牛一只,新生小牛两只(1岁,0岁),共3只
第三年:母牛一只,新生小牛三只(2岁,1岁,0岁),共4只
第四年:母牛一只,新生小牛四只(3岁,2岁,1岁,0岁),共5只

第五年:母牛一只,新生小牛五只(4岁,3岁,2岁,1岁,0岁),共6只

第六年:母牛一只,新生小牛六只(5岁,4岁,3岁,2岁,1岁,0岁)+普通牛生的一只(0岁),共8只

刚好是8只,说明程序没有问题。

完成了视屏中马老师布置的训练面向对象思想的作业,说实话这里面没有体现多少面向对象的思
想,也许是因为之前用面向过程的思想做ACM久了有些习惯一时半会改不了吧。见笑了。

如果有更好的程序,也希望大家提出更好的意见。

转载请注明出处:http://blog.csdn.net/acmman

【设计模式】面向对象作业-超级母牛的故事相关推荐

  1. HDU2018 母牛的故事

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  2. 函数递归简单题-hdoj-2044 2018-一只小蜜蜂 母牛的故事

    题目:一只小蜜蜂 递归做法: #include<cstdio> #include<iostream> #include<stdlib.h> #include< ...

  3. 题目 1004: [递归]母牛的故事

    题目 1004: [递归]母牛的故事 idea 1 2 3 4 6 9 13 第4年母牛的数量=第1年母牛的数量+第3年母牛的数量 第5年母牛的数量=第2年母牛的数量+第4年母牛的数量 第6年母牛的数 ...

  4. C++描述杭电OJ 2018.母牛的故事 ||

    C++描述杭电OJ 2018.母牛的故事 || Problem Description 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候 ...

  5. 数据结构与算法分析(十)——母牛的故事

    题目 母牛的故事 从前有一个农夫,他的名字叫做约翰.他养了很多很多头母牛.突然有一天,一只调皮的母牛走丢了,农夫要尽快的抓住她,不然她就又跑掉了!现在我们将问题简单化.假设农夫和母牛都站在一条数轴上, ...

  6. HDU2018 母牛的故事【递推+记忆化递归】

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  7. 【递推】HDU -2018 母牛的故事斐波那契兔子数列

    函数之递归的应用 母牛的故事 (这个问题还有很多类似的,比如种树,每一年种的树品质在改变,当然区别在于树不能生孩子.. 相应的人类达到法定年龄就可以生孩子,这个和母牛问题一样,只不过时间间隔变化了. ...

  8. 母牛的故事——无脑模拟解法

    文章目录 前言 题目 题目描述 输入 输出 样例 思路剖析 完整代码 写在最后 前言 老规矩 开始之前唠一唠写这个题的初衷.事情是这样的,一个很偶然的机会,我做到了这道名为母牛的故事的题,做出来之后听 ...

  9. hdu2018 母牛的故事(模拟)

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

最新文章

  1. Spring boot添加员工页面跳转
  2. php 设置window计划任务,windows下设置计划任务自动执行PHP脚本
  3. opencv进阶学习笔记4:ROI和泛洪扩充
  4. Flask的csrf_token校验
  5. php生成 sku_高并发下,php与redis实现的抢购、秒杀功能
  6. 2021年春季学期期末统一考试 国际公法 试题
  7. 内核程序员的职位面试技巧
  8. c语言程序编译成功运行失败,为什么这个程序编译成功但运行失败?
  9. 中级php工程师书籍,中级PHP工程师
  10. k8s核心技术-持久化存储(PV和PVC)---K8S_Google工作笔记0051
  11. smtplib发送带附件的邮件
  12. 物联网数据的采集与处理
  13. 计算机小知识140,140个电脑小知识,电脑知识-
  14. 使用imageio写视频文件指定输出质量
  15. 服务条目与采购订单、采购申请、工单、项目及WBS的关系
  16. portSentry入侵检测工具
  17. 阿拉伯字母发音--全集
  18. 信号signal ---带数据的信号的发送及安装
  19. 高效能创业者的七项习惯
  20. 国家/行业标准查询及下载全流程

热门文章

  1. 今天,我辞职了,35岁对测试员的影响究竟有多大?
  2. matlab虚拟现实之建立simulink虚拟现实工具箱的使用
  3. php中execute函数,PHP:调用布尔值上的成员函数execute()
  4. 1、css引入的方式有哪些?_低氮燃烧技术都有哪些?
  5. 零点起飞学php下载,零点起飞学PHP(附光盘)/零点起飞学编程
  6. DynamicFusion: Reconstruction and Tracking of Non-rigid scenes in real-time
  7. GoogleNet_V3结构(论文复现)
  8. 【java】二维数组的应用
  9. 【java】创建一个窗口,统计输入内容
  10. 扫地机自动回充揭秘之小米/iRobot/云鲸/360