Ваш робот должен обработать все грядки и остановиться на базе. При этом при составлении программы ипользовать команды ПОКА, ЕСЛИ, ПОВТОРИТЬ.
Особое внимание обратить на повторяющиеся элементы лабиринта. Это означает, что в программе используется подпрограмма.
Так как нужно из числа 4 получить число 80, то первая команда не может являться "2", в противном случае мы уйдем в отрицательные числа. Тогда первая команда - "1", и теперь нам нужно из числа 20 получить число 80. Рассмотрим несколько случаев, когда последней командой мы получаем число 80.
1 случай.
Если последняя команда - "1", то это возможно, когда предпоследний результат будет равен 16, однако так как наша траектория точно содержит число 20, которое кратно 5, то, применяя далее наши команды, мы всегда будем получать число, кратное 5, а нам нужно получить 16. Противоречие.
2 случай.
Теперь рассмотрим ситуацию, когда последняя команда - "2". То есть предпоследний результат равен 85. Если получать число 85 командой "1", то траектория должна содержать число 17. Из соображений кратности (см. 1 случай) это невозможно. Значит вторая с конца команда должна являться "2". Аналогично рассуждая, приходим к выводу о том, что и третья, и четвертая команды с конца тоже должны быть "2". То есть наша траектория имеет вид 1*2222, причем на месте "*" должна быть такая траектория команд, которая позволит получить из числа 20 число 100. Ясно, что наименьшая траектория будет 112222, но она содержит 6 команд. Противоречие.
Получается, что из числа 4 получить число 80 программой, которая бы содержала не более 5 команд, действительно не получится. Но если говорить о наименьшей траектории, то 112222 - будет являться ответом на эту задачу.
using System;
class Program
{
static void Main()
{
int x1 = 2, y1 = 1;
int x2 = 6, y2 = 5;
int x3 = 10, y3 = 1;
var a = Distance(x2, y2, x3, y3);
var b = Distance(x1, y1, x3, y3);
var c = Distance(x2, y2, x1, y1);
Console.WriteLine("S = {0}", Square(a, b, c));
Console.ReadKey();
}
//растояние между точками
static double Distance(int x1, int y1, int x2, int y2)
{
return Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
//формула герона
static double Square(double a, double b, double c)
{
var p = (a + b + c) / 2;
return Math.Sqrt(p * (p - a) * (p - b) * (p - c));
}
// теорема косинусов
static double Angle(double a, double b, double c)
{
return Math.Acos((b * b + c * c - a * a) / (2 * b * c));
}
static bool IsAcuteAngel(double alpha)
{
return alpha < Math.PI / 2;
}
}