Ah, but for structure! Rather than a free-form post, I'll reminisce on the beginning of the year that's already so far away. The first day of Advanced Computer Programming, we were given this puzzle:
Find a 10-digit number such that:
All digits 0,1,2,3,4,5,6,7,8,9 are used.
The first digit is divisible by one,
The first two digits are divisible by two,
The first three digits are divisible by three,
...
The first ten digits are divisible by ten.
Because the decision wasn't yet made to use C++, I whipped out my flash drive (with a portable Java IDE) and quickly made a program to find such a number. I two ArrayLists (extendable lists); one was initialized to hold the digits {1, 2, 3, 4, 6, 7, 8, 9}. I'd progress through the indices 1 to 10, add every remaining digit to each digit in the list, and put the valid results in the other ArrayList - in essence searching a tree. The final result is "3816547290" (highlight text to view answer).
A week later I did the same thing in C++ for a bit of experience. Instead of ArrayLists I had to use vectors (which are pretty much the same). This algorithm is one that can't easily use a list of fixed length.
This is why it's good that vectors exist. I had to add numbers to the vector, but could not previously know how large the vector needed to be (my program separated into 8, 28, 64, 68, 68, 20, 11, 1, 1, and 1 branches while running - that isn't a predictable pattern). Perhaps I could have created a new list every iteration, but the efficiency would dive. Maybe there is, in fact, a more efficient method, but using a randomly accessed floating-length array saved time (no arrays or linked lists here!), and I wasn't worried too much about processing power.
So there you go. A quick problem, a quick solution, and something learned along the way. That's a good summary of this class so far, and I like it.