本文共 4307 字,大约阅读时间需要 14 分钟。
编写一个程序,模拟兔子繁殖过程,计算第20个月和第15个月的兔子对数。初始时有一对成年兔子,每对兔子每月繁殖一对兔子,兔子不会死亡。
在经典问题的基础上,设定每对兔子繁殖两代后死亡,计算第20个月和第15个月的兔子对数。
设定兔子每K个月繁殖一次,每对兔子繁殖P代后死亡,计算第N个月的兔子对数。
这三个题目看似复杂,但实际上可以通过简单的数据结构和逻辑实现。主要操作包括兔子出生和死亡的判断。可以使用向量存储兔子实例,通过循环模拟每月的繁殖和死亡过程。
#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); } 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 "/"; cout << s << endl; cout << " "; while (1) { cout << "please input death_time: "; if (!(cin >> Death_Time)) { cout << "Wrong, you have inputed a wrong type data!" << endl; cin.clear(); while (cin.get() != '\n') continue; cout << "please input Death_Time again" << endl; cin >> Death_Time; } while (1) { cout << "Please input Mature_Time: "; if (!(cin >> Mature_Time)) { cout << "Wrong, you have inputed a wrong type data!" << endl; cin.clear(); while (cin.get() != '\n') continue; cout << "please input Mature_Time again" << endl; cin >> Mature_Time; } } while (1) { cout << "Please input Month_Num to Compute: "; if (!(cin >> Month_Num)) { cout << "Wrong, you have inputed a wrong type data!" << endl; cin.clear(); 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); cout << rabbit_sum_num << endl; }}
rabbit 类用于存储兔子的成年状态、死亡状态、成长时间和繁殖时间。Compute_Num 模拟每月的兔子繁殖和死亡过程,返回指定月份的兔子总数。转载地址:http://rwrl.baihongyu.com/