Авторство не моё, но здорово мне помогло на 1 курсе.
- Запомните: излишне обтекаемая формулировка задач на экзамене -- ваше преимущество, а не проблема.
- Прочитав -- не бросаться кодировать, сначала быстро обдумать подходы к решению задачи и возможные упрощения.
- Грамотно отделить существенное в задаче от несущественного: существенное надо писать самому, а несущественное описать в предположенях (например, если задача -- реверс стека, то реализация стека к задаче не относится).
- Выбирайте подход с учётом оставшегося времени (не надо писать столь длинный код, что к концу экзамена будет готова только его половина -- простое решение, полностью соответствующее задаче, намного лучше никакого решения и кучи запачканных листов).
- С учётом выбранного подхода описать предположения: программа работает только для однознаковых чисел, только если между ними не стоит пробел, формат только такой-то и так далее. Так к вам сложнее придраться -- ведь это ваше понимание весьма обобщенно сформулированной задачи.
- Делайте так, как вам удобно: упрощайте. Но при этом не лишайте задачу смысла -- в задаче "дифференцирование многочлена" нельзя написать что-то типа "предположим, есть функция, принимающая запись многочлена, и функция, дифференцирующая его по записи -- готово!", а в задаче "удалить конкретное слово из потока двоичных слов" нельзя написать программу, которая работает только для последовательности из двух чисел. С другой стороны, если написано "перемножить многочлены", но как они записаны не сказано, то как вам писать его удобнее -- так и пишите. Просто "реализуйте универсальную машину Тьюринга на Си"? Накладывайте любые адекватные ограничения: лента не больше 10 тыс знаков, программа на вход подаётся таким-то способом и так далее.
- Если не успеваете что-то дописать -- допишите то, что в большей степени релевантно заданию и что вы сможете успеть. Остальные вещи опишите словами и как-то покажите, что вы на самом деле хорошо понимаете как это сделать. Пример -- если стоит задача написать интерпретатор машин Тьюринга, а время вы не рассчитали, осталось 10 минут -- лучше не писать считывание программы и ленты со входного потока. Просто напишите, что они уже как-то попали в программу (лента в таком-то массиве, программа в таком-то). При этом желательно всё-таки описать, как это сделать по-нормальному, но описать словами, а не кодом. Преподаватель будет уверен, что будь у вас больше времени -- вы бы всё написали.
- Не помните порядок аргументов в какой-то функции? Не страшно: зафиксируйте любой удобный вам порядок и просто явно скажите об этом в предположениях, указав что эта функция должна делать.
- Не забывайте ВСЕГДА писать тесты! И ещё красиво смотрятся диаграммки и прочие иллюстрации.
- Для основных алгоритмов в задаче обязательно давайте асимптотическую оценку времени выполнения -- это занимает не больше минуты и при этом выглядит очень круто. Написали линейный поиск? Отлично, напишите ещё что временная сложность алгоритма -- O(n), а по памяти -- O(1). Если есть время -- можно ещё написать лучшие и худшие случаи для алгоритма, это тоже похвально.
- Если уж так случилось, что подготовка к экзаменам и учёба в течение года -- не ваш конёк, опишите решение словами. Прямо как с кодом, но только словами: попробуйте показать правильную декомпозицию если она нужна, оцените асимптотическую сложность, напишите тесты, попробуйте описать словами главные части и так далее.
- Не умеете списывать -- не списывайте. Хотите делать бомбы, но не можете из-за того что используется какая-то особая бумага? Так посмотрите что это за бумага -- наверняка до вас будут другие группы. Может в прошлом году это были презентации дипломников, выпустившихся в прошлый год? Ну так достаньте эти презентации и распечатайте. Иными словами, хоть какой-то свой навык на экзамене вы должны показать. Если ваши навыки из области мелкого мошенничества -- ну пусть хоть они будут на уровне.