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