博客
关于我
2020秋数据结构实验第一题:兔子数列仿真(斐波那契数列仿真)C++实现
阅读量:312 次
发布时间:2019-03-03

本文共 3624 字,大约阅读时间需要 12 分钟。

实验题目描述:

  1. 编程实现兔⼦问题,历史上有⼀个有名的关于兔⼦的问题:假设有⼀对兔⼦,⻓两个⽉它们就算 ⻓⼤成年了。然后以后每个⽉都会⽣出1对兔⼦,⽣下来的兔⼦也都是⻓两个⽉就算成年,然后每 个⽉也都会⽣出1对兔⼦了。这⾥假设兔⼦不会死,每次都是只⽣1对兔⼦,实现计算第20个(第 15)⽉的兔⼦对数
  2. 加入条件,每对兔⼦⽣完2次(N次)兔⼦后会死亡,实现计算第20个(第15)⽉的兔⼦对数
  3. 隔⼏个⽉后可以繁殖设置为参数K, 繁殖⼏代后死亡设置成参数P,计算第N个⽉的兔⼦对数

题目分析:

看似题目是三个逐步递进的过程,其实还是比较简单的,只需要建立一个简单的结构体或者类,,然后根据相应的标志位设置是否死亡,是否长大,是否新生,是否可繁殖这四步,主要的其实是两个动作,一个出生,一个死亡,就是结构体数组的删除和新建罢了,后面放出源码,未加入繁殖两代之间的间隔,可自行加入,大家仅供参考,不可原版照抄!

题目实现源码

#include
#include
#include
#include
using namespace std;class rabbit {private: bool Is_Adult; bool Is_Death; int Grown_Time; int Breed_Time; int DEATH_TIME; int MATURE_TIME;public: rabbit(int Death_Time, int Mature_Time) { DEATH_TIME = Death_Time; MATURE_TIME = Mature_Time; Is_Adult = false; Is_Death = false; Grown_Time = 0; Breed_Time = 0; } bool Get_Is_Adult() { return Is_Adult; } bool Get_Is_Death() { return Is_Death; } int Get_Grown_Time() { return Grown_Time; } int Get_Breed_Time() { return Breed_Time; } void Add_Grown_Time() { Grown_Time++; if (Grown_Time >= MATURE_TIME) Is_Adult = true; } void Add_Breed_Time() { Breed_Time++; if (Breed_Time >= DEATH_TIME) Is_Death = true; }};int Compute_Num(int Month_Num, vector
Rabbits, int Death_Time, int Mature_Time) { for (int i = 0; i < Month_Num; i++) { int Rabbits_Size_Now = Rabbits.size(); int Dead_Rabbits = 0; int Born_Rabbits = 0; for (int j = 0; j < Rabbits_Size_Now;) { if (Rabbits[j].Get_Is_Death()) { Rabbits.erase(Rabbits.begin() + j); Rabbits_Size_Now--; Dead_Rabbits++; continue; } if (Rabbits[j].Get_Is_Adult()) { rabbit *r = new rabbit(Death_Time, Mature_Time); Rabbits.push_back(*r); Rabbits[j].Add_Breed_Time(); Born_Rabbits++; Rabbits_Size_Now++; if (Rabbits[j].Get_Is_Death()) { Rabbits.erase(Rabbits.begin() + j); Rabbits_Size_Now--; Dead_Rabbits++; continue; } } else Rabbits[j].Add_Grown_Time(); j++; } printf("The %2d month has %2d rabbits!\n",i+1,Rabbits.size()); if (Dead_Rabbits) printf("The %2d month has %2d rabbits dead!\n", i+1,Dead_Rabbits); if (Born_Rabbits) printf("The %2d month has %2d rabbits born!\n", i+1, Born_Rabbits); //cout << "The " << i + 1 << " month has " << Rabbits.size() << " rabbits!" << endl; } return Rabbits.size();}int main() { int Death_Time, Mature_Time, Month_Num; char s[200] = "Example: Death_Time = 100000000, Mature_Time = 2, Month_Num = 12"; cout << "/"; for (int i = 0; i < strlen(s); i++) cout << "*"; cout << "/"<
> Death_Time; while (cin.fail()) { cout << "Wrong, you have inputed a wrong type data!" << endl; cin.clear();//清除错误标记,重新打开输入流,但是输入流中依旧保留着之前的不匹配的类型 /*cin.sync();*///清楚cin缓存区的数据。 while (cin.get() != '\n') { continue; } cout << "please input Death_Time again" << endl; cin >> Death_Time; } cout << "Please input Mature_Time: "; cin >> Mature_Time; while (cin.fail()) { cout << "Wrong, you have inputed a wrong type data!" << endl; cin.clear();//清除错误标记,重新打开输入流,但是输入流中依旧保留着之前的不匹配的类型 /*cin.sync();*///清楚cin缓存区的数据。 while (cin.get() != '\n') { continue; } cout << "please input Mature_Time again" << endl; cin >> Mature_Time; } cout << "Please input Month_Num to Compute: "; cin >> Month_Num; while (cin.fail()) { cout << "Wrong, you have inputed a wrong type data!" << endl; cin.clear();//清除错误标记,重新打开输入流,但是输入流中依旧保留着之前的不匹配的类型 /*cin.sync();*///清楚cin缓存区的数据。 while (cin.get() != '\n') { continue; } cout << "please input Month_Num again" << endl; cin >> Month_Num; } vector
Test; rabbit* a = new rabbit(Death_Time, Mature_Time); Test.push_back(*a); int rabbit_sum_num = Compute_Num(Month_Num, Test, Death_Time, Mature_Time); }}

 

转载地址:http://rwrl.baihongyu.com/

你可能感兴趣的文章
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>