Without knowing complete scope of what you're trying to do... my suggestion is:
should I define answer options tables for each different question types separately?
Looks like you might need Polymorphic Relations to retrieve a question based on the subject, like math, english, etc. In addition, I would create a boolean column for type of question multiple choice or data entry, so when presenting question in front-end you can display data accordingly. I would keep the answer in the same table as the question, as two are related and there's only one correct answer.
how do I implement a front end which can change dynamically for the different question types?
This sounds to me like an algorithm, in which your application can pick 20 random question, maybe based on difficulty... based on the boolean value mentioned above you can pick, 10 multiple choice, and 10 non-multiple choice to present to the user.
Hope that helps, Best, Alen