Закраски клеток (команда 5) здесь нет, значит надо просто обеспечить более короткое перемещение в ту же конечную точку.
Для этого посмотрим, что за движения там записаны.
Если во всём алгоритме три раза вверх и три раза вниз- то робот вернётся в ту же точку (по вертикали), и значит все эти команды можно просто удалить.
То же самое- для движений влево и вправо. Они тоже взаимно противоположные.
Другими словами- надо просто сократить все пары движений влево-вправо и вверх-вниз. Всё что останется- это и есть короткий вариант алгоритма, который даст перемещение ту же самую конечную точку.
Запишу подробнее, как сократить алгоритм движения (только для случая без закраски):
а) берём наш алгоритм: 131413324223
б) во всём алгоритме считаем количество команд перемещения для каждого из направлений движения:
1 (вверх)- 3 штуки
2 (вниз)- 3 штуки
3 (влево)- 4 штуки
4 (вправо)- 2 штуки
в) считаем разность количества команд влево и вправо (из большего числа вычитаем меньшее): 4 - 2 = 2
Осталось две команды - влево (т.к. их было больше). Остальные команды влево-вправо сократились (мы их удалили из алгоритма).
г) считаем разность количества команд вверх и вниз (из большего числа вычитаем меньшее, но тут числа равны): 3 - 3 = 0
Не осталось ни одной команды вверх или вниз. Все эти команды сократились (мы их удалили из алгоритма).
д) получаем, что в коротком варианте алгоритма останутся только две команды влево (3).
Запишем весь алгоритм: 33
using namespace std;
#include <algorithm>
#include <iostream>
#include <vector>
#include <ctime>
int main() {
vector<int> arr;
srand(time(0));
int N = 10;
int min = 9999999, minIndex;
int average = 0;
for(int i = 1; i<=N; ++i) {
arr.push_back(rand());
cout << arr[i-1] << " ";
if(arr[i-1]<min) {
min = arr[i-1];
minIndex = i-1;
}
average+=arr[i-1];
}
cout << endl << "Min: " << min << endl << "Average: " << average/N << endl;
swap(arr[minIndex], arr[arr.size()-1]);
for(int i = 1; i<=N; ++i) {
cout << arr[i-1] << " ";
}
cout << endl << " > average: ";
for(int i = 1; i<=N; ++i) {
if(arr[i-1]>average/N) {
cout << arr[i-1] << " ";
}
}
}