General assignment guidelines
1. All imperative programs should have relevant assertions given as comments at important points. For example, for each loop you should state the invariant at the top of the loop, and the post-condition below the end of the loop. ese can be stated in words instead of mathematically if you prefer.
2. If an analysis of eciency is asked, it must be carried out for all functions that use recursion or loops, including helper functions.
3. Big O notation should be as tight as possible. For example, reporting 푂(푛 2 ) complexity for an 푂(푛) algorithm could lose you marks, even though it is technically correct.
4. For the programming component of each question, the name and the type of the main function must be exactly as specied in the question. You can take help of the test cases provided to validate your code.
5. Any function that has integer input and output must not perform any intermediate
computation using oating-point numbers