Need some help with n00b code project
I can code things okay, but I have real trouble coming up with algorithims to solve problems. For instance this problem:
'A scientist uses rabbits (yes, another rabbit problem) in her experiments. She starts out with one pair(male,female). At the end of each month, a pair of rabbits produces one pair of offspring(also male,female). The scientist has 500 cages to hold her rabbits. Each cage holds one pair of rabbits. Assuming no rabbits ever die, when will she run out of cages?'
The program should printout how the rabbits multiply and produce baby rabbits which then add to the total rabbit population. Then when the total pairs reach past 500 cages print out a message saying in what month that happens. For example:
Month Adults Babies Total
1 1 0 1
2 1 1 2
3 2 1 3
4 3 2 5
*snip*
12 144 89 233
Will run out of cages in month xx...
Really, I don't know where to begin other than making the first declarations:
const int CAGE = 500; // I dont know if i need this
int adultRabbits;
int babyRabbits;
int totalRabbits = adultRabbits + babyRabbits;
int month;
for
cout << "\n" << month << "\t" << adultRabbits << "\t" << babyRabbits << "\t" << pairs; // I know i need this to print the results right
I am thinking I need a loop, but not sure which one to use, For, While, Do, or If. And I definately don't know what math I may need to get the algorithim. Several different ones I suppose.
Any help is greatly appreciated.
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
Is that table correct? I would think that you should start with two rabbits, then the number should double each month (i.e., exponential growth of 2^x)
GloriousEremite
Junior Poster in Training
65 posts since Jul 2006
Reputation Points: 108
Solved Threads: 14
Yes the table's correct. I guess at the end of the month, 'babies' can't make babies, so they are not included in the rabbit making population. Hence one of my problems. Somehow at the _end_ of month one, the adults make another pair of rabbits. So there are two pair now, but only one is mature. So next month, at the end, there will be 2 pair that are adults and 1 pair of babies. Then, month 3 has the 3 pair of adults (2 pair + 1 pair of matured babies), which produce 3 more pair. So add the 3 pair of adults + 3 pair of babies. And so on, make sense?
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
Even if it were exponential, can ya start me in the right direction as to setting up the code? I'm pretty sure its a IF loop, then need the ++increment, but not sure where to finish it.
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
First thing you probably want to do is write out more of that table (incidentally, I just recognized that sequence). Once you can describe the pattern, it shouldn't be too hard to replicate it.
Also, you should be able to use any type of loop if you set it up correctly, but in this case I believe a while or a for loop would work best.
GloriousEremite
Junior Poster in Training
65 posts since Jul 2006
Reputation Points: 108
Solved Threads: 14
I've got the first workings of code of the for loop, but thats it:
for (int currentMonth = 0; currentMonth < 15; currentMonth++){
cout << "\n" << currentMonth << "\t" << adultRabbits << "\t" << babyRabbits << "\t" << totalPairs;
}
So I can print out the table fine, i just need the algorithim and I can't figure it out :(
Its something like adultRabbits + babyRabbits = totalRabbits;
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
Hmm, this seems to work for adding the totals up:
for (int currentMonth = 0; currentMonth < 15; currentMonth++){
adultRabbits = adultRabbits + 1;
babyRabbits = adultRabbits + 1;
int totalPairs = adultRabbits + babyRabbits;
cout << "\n" << currentMonth << "\t" << adultRabbits << "\t" << babyRabbits << "\t" << totalPairs;
}
But I can't get the right math to take me to the correct totals :/
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
Thats awesome that helps a lot. Thanks! If you see the table above, you can see that it is a little different though, so i am thinking that adultrabbits != babyrabbits, because in the first month there is only 1 adult pair and no babies yet.
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
Well you have adultrabbits += babyRabbits;
I'm not sure this works, because in the first month adults are 1 and babies are 0; The 2nd month then has 2 adults and then 1 babypair. So there needs to be a way to increment or decrement maybe? Basically you are moving 1 pair of babies over to the adultrabbit column at the end of the month. It's confusing huh? :/
All of these are in terms of pairs by the way.
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
So what do i change to get the correct output?
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
Think about it this way (ignore the total for now):
End of Month 1: Adults - 1, Babies - 0
End of Month 2: Adults - 1, Babies - 1
End of Month 3: Adults - 2, Babies - 1 <-- Number of adults _last_ month
End of Month 4: Adults - 3, Babies - 2
What you're doing is setting babies to the number of adults _this_ month. To get the correct number, you should subtract what you added last month from the current number of adults.
Also, you should set your initial values of adults, babies, etc. Then inside the loop, output first, then perform your calculations.
GloriousEremite
Junior Poster in Training
65 posts since Jul 2006
Reputation Points: 108
Solved Threads: 14
Just wanted to say thanks for the great help so far!
So i need to do that for ever month? or you are using that code as an example? There is supposed to be a loop that continues until you hit 500 pairs and then printout the month in which you hit that number.
So writing a line for each month seems unlikely since you don't know (technically) when you will hit that number?
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
BTW, your output is wrong. You check when the adults run out of cages, but you should check when the total runs out of cages, at least, I think you should. Babies to take cages :P
Hehe, that is the correct output. Don't ask me why, I think its silly, but it's what the instructor wants so I need to code it to look like that :(
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
Here is what I now have:
using namespace std;
int currentMonth = 0;
int adultPairs = 1;
int babyPairs = 0;
int totalPairs;
int main()
{
cout << "\nTable of rabbit population, in pairs, for 12 months" << endl;
cout << "\n" << "Month" << "\t" << "Adults" << "\t" << "Babies" << "\t" << "Total";
while((adultPairs + babyPairs) <= 500)
{
adultPairs += babyPairs; // babies grow to be adults
currentMonth++; // at the end of the month
babyPairs = adultPairs; // all adults have 1 pair of babies
totalPairs = babyPairs + adultPairs;
cout << "\n" << currentMonth << "\t" << adultPairs << "\t" << babyPairs << "\t" << totalPairs;
}
if (totalPairs > 500){
cout << "\nWill run out of cages in month " << currentMonth << endl;
}
system("PAUSE");
return 0;
}
What I have now, is not printing the right totals. Its close though. What do I need to change to get the ouput like how it is in the image I posted?
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0
What you're doing is setting babies to the number of adults _this_ month. To get the correct number, you should subtract what you added last month from the current number of adults.
How can I do this? I've tried various ways like adultRabbits -= babyRabbits and vice versa to no avail.
matrimforever
Junior Poster in Training
67 posts since Sep 2006
Reputation Points: 26
Solved Threads: 0