Задача B.01: Конь в поле
Эта задача с открытыми тестами. Ее решением является набор ответов, а не программа на языке программирования. Тесты указаны в самом условии, от вас требуется лишь ввести ответы на них в тестирующую систему.
На шахматном поле размером N × N клеток пасется шахматный конь. Сейчас он находится в клетке с координатами (x1, y1). Сегодня шахматный конь узнал, что на клетке с координатами (x2, y2) начала расти его любимая шахматная трава и он захотел добраться туда как можно быстрее, пока трава не завяла.
Вам требуется определить, за какое наименьшее количество ходов он сможет добраться до этой клетки.
Напомним, что шахматный конь за один ход изменяет одну из координат на 2, а другую на 1. Например, если конь стоит в клетке (3, 4), то за один ход он может попасть в клетки (1, 3), (1, 5), (2, 2), (2, 6), (4, 2), (4, 6), (5, 3) и (5, 5). Конь не может выходить за пределы шахматного поля.
Формат входных данных
Тест №1: N = 4, (x1, y1) = (1, 1), (x2, y2) = (2, 2);
Тест №2: N = 5, (x1, y1) = (4, 2), (x2, y2) = (2, 1);
Тест №3: N = 6, (x1, y1) = (2, 5), (x2, y2) = (4, 1);
Тест №4: N = 7, (x1, y1) = (2, 1), (x2, y2) = (7, 3);
Тест №5: N = 8, (x1, y1) = (6, 2), (x2, y2) = (4, 7);
Тест №6: N = 9, (x1, y1) = (8, 3), (x2, y2) = (1, 2);
Тест №7: N = 10, (x1, y1) = (10, 4), (x2, y2) = (10, 6);
Тест №8: N = 11, (x1, y1) = (10, 3), (x2, y2) = (8, 10);
Тест №9: N = 12, (x1, y1) = (12, 9), (x2, y2) = (1, 9);
Тест №10: N = 13, (x1, y1) = (1, 13), (x2, y2) = (12, 1);
Формат результата
В поле ввода ответа впишите единственное число — наименьшее количество шагов, за которое шахматный конь сможет добраться от клетки с координатами (x1, y1) до клетки с координатами (x2, y2).
Для перевода десятичного числа в двоичную систему его необходимо последовательно делить на 2 до тех пор, пока не останется остаток, меньший или равный 1
52
Нормализованная экспоненциальная запись числа – это запись вида
a = ± m * P^(q)
Где q – целое число (положительное, отрицательное или ноль) m – правильная Р-ичная дробь, у которой целая часть состоит из одной цифры, при этом m – это мантисса числа, а q – порядок (или экспонента) числа.
В нашем случае:
1,6898*10^-3
Для перевода десятичного числа в восьмеричную систему его необходимо последовательно делить на 8 до тех пор, пока не останется остаток, меньший или равный 7. Число в восьмеричной системе записывается как последовательность цифр последнего результата деления и остатков от деления в обратном порядке.
1616
import turtle
from math import tan, sqrt, pi
def prepare(x, y, color):
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
turtle.color(color)
turtle.begin_fill()
def draw_polygon(num_sides, side_length):
angle = 360.0 / num_sides
for i in range(num_sides):
turtle.forward(side_length)
turtle.right(angle)
turtle.end_fill()
def calc_s(num_sides, side_length):
return num_sides * side_length ** 2 / (4 * tan(pi/num_sides))
def calc_side(square):
return sqrt(4 * square * tan(pi/num_sides) / num_sides)
turtle.hideturtle()
turtle.speed(10)
colors = ['red', 'green', 'blue', 'cyan', 'magenta', 'black', 'yellow', 'pink', 'brown']
xcoords = [0, 150, -150, 150, -150, 270, -270, 270, -270]
ycoords = [0, 150, -150, -150, 150, 270, -270, -270, 270]
squares = []
numsides = []
for i in range(9):
num_sides = i + 3
square = round(calc_s(num_sides, 100), 2)
side_length = round(calc_side(10000), 3)
squares.append(square)
numsides.append(num_sides)
print("Углов:", num_sides, "была площадь:", square, "стала длина грани:", side_length,
"изменение в", round(side_length/100, 2), "раз")
prepare(xcoords[i], ycoords[i], colors[i])
draw_polygon(num_sides, side_length)
turtle.exitonclick()
print("Список количество углов:", numsides, end="")
print("Список площади:", squares)
Объяснение: