Есть задача. Вроде на алгоритм ее разложить я могу, но как представить это в виде программы? Какие переменные следует вводить? Я зачастую не понимаю этого в сложных задачах. Есть ли какая-нибудь книга, которая поможет в этом разобраться новичку?
Возможно алгоритмы которые Вы пытаетесь писать "одним куском" действительно слишком сложны. Их нужно разбить на части и оформить каждую как отдельную функцию или метод. Это называется "разбиение задачи на подзадачи".
С переменными - а единого решения в чем-либо сложнее решения квадратного уравнения и нет. Каждый программист один и тот же код напишет по разному. Один вынесет какую то часть выражения в переменную, а другой выражение сплошным напишет. Там где вообще есть выбор нужна ли переменная или нет: обычно если значение повторяется несколько раз значит нужна. И если все выражение кажется Вам самому слишком сложным - значит его часть надо вынести в переменную.
И еще не всегда и нужно сразу до написания кода продумывать какие будут переменные.Собственно достаточно продумать заранее код с точностью до отдельных функций/методов. А переменные добавляются чаще всего по ходу кодирования. Ну т.е. Что-то нам нужно перебрать и мы написали цикл. Соответственно сразу же определили переменную счетчик или итератор этого цикла. Далее пишем логику цикла и понимаем, что нам нужно подсчитывать что-то по всем или части элементов, ну например количество отрицательных, или минимальное значение. Вот как это поняли так переменную и определили. Обычно на таком низком уровне абстракции код так и пишется по ходу. Концептуально продумывается на несколько более абстрактном уровне нежели локальные переменные.