Вариант тупой, при котором мозг не задет - развернуть массив, сдвинуть вправо, развернуть опять.
Вариант чуть получше - вместо разворота, представить, что массив развернут. Тогда при любом обращении к элементу номер x надо обращаться к элементу n-1-x. Т.е. тупо в программе, где сдвиг делается(после ввода), каждый arr[x] заменить на arr[n-1-x] (примеры x у вас там - n-1, i+1, i, 0).
Вариант еще лучше - включить голову и просто подумать. Сдвиг влево - это в сторону уменьшения индекса. arr[0] становится arr[1], arr[1] - arr[2], и так далее. arr[n-1] становится arr[0]. Т.е. надо в буфер запомнить arr[0], пройтись циклом по возрастанию i и присвоить каждому элементу следующее за ним (+1 к индексу) значение. Потом arr[n-1] заполнить из буфера. На самом деле получится то же, что и в предыдущем варианте, но без лишних вычислений индексов.
Вариант совсем хороший - не городить shift сдвигов на одну позицию, а сдвигать сразу на shift позиций. Для этого в буфер надо засунуть первые shift элементов, потом пройтись циклом и записывать в i-ый значение из i+shift-ого. Потом последние shift позиций заполнить из буфера.
Вариант со звездочкой - можно делать без буфера на shift элементов, и сдвигать на shift позиций прямо в массиве, но тут надо знать про перестановки и GCD.