I think this is typical specially if this is your first CS/programming course.
Thinking:
You should probably consider these points:
you, as a human being, should be able to solve the problem yourself or at least you should have a basic idea of a solution before you try to make the computer solve it.
I think problems that can be easily solved by human beings can be typically easily solved by a computer as well, assuming it was given the correct algorithms.
you take things for granted that the computer doesn't, so try to be specific as much as possible. you could probably use a strategy like top-down design and step-wise refinement
Here's a way to solve caesar using this approach
Level 0:
encrypt plain text p with caesar cipher using a key k
Level 1:
1. accept k as a command-line argument and validate it
2. prompt the user for p
3. encrypt p and print the encrypted text out
Level 2:
1. accept k as a command-line argument and validate it
a. ensure argc stores the correct value
b. convert k to a number
c. ensure k is within range
2. prompt the user for p
3. encrypt p
a. iterate over each character c in p
b. if c is an alphabetical character
c. // handle c according to the specs
d. else
e. // handle c according to the specs
So this is one way of thinking. I tried to keep things challenging for you up here to give you room to think. Obviously you could dive as deep as you like.
From my little experience, it takes time and efforts to improve your problem-solving skills. And it gets better and better as you practice. So don't give up!
Feel free to re- watch/read the resources, Google or ask for hints!
Implementation:
You don't memorize the syntax or the available tools/constructs. You just use the available manuals/resources again and again until things become part of your memory. I think this is a valid meaning of "experience".
So given the pseudocode above, suppose I don't know what a command-line argument is, or how to ensure that my program was given the correct number of arguments, etc. Even if these were not issued in the weeks, which they were, I could Google how to do that or ask for hints if Google led me to nowhere, which it rarely does.
So don't be afraid of going back to the weeks or even copying piece of code from there or anywhere else (e.g., a for loop that iterates over a string). More importantly, since you're essentially learning, is to perfectly understand how this code works, why it would fit best, try to optimize it, test it, play with it see if things go wrong and understand why, etc.