Бесконечную таблицу, строки и столбцы которой пронумерованы целыми числами начиная с 1 сверху вниз и слева направо, заполняют целыми числами 1, 2, 3 и т.д. Числа выписываются в соседние клетки по границам квадратов увеличивающегося размера (см. рисунок).
Дано число n, определите номер строки и номер столбца, в котором окажется это число.
Входные данные
Программа получает на вход одно целое число n, 1 ≤ n ≤ 1018.
Обратите внимание, что значение n может быть больше, чем возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные числа (тип int64 в языке Pascal, тип long long в C и C++, тип long в Java и C#).
Выходные данные
Программа должна вывести два целых числа: номер строки и номер столбца, в которых находится число n в этой таблице. Запись выводимых чисел должна содержать только цифры, вывод действительных чисел в ответе считается неверным.
Система оценивания
Решение, правильно работающее только для случаев, когда n ≤ 100, будет оцениваться в 20 баллов.
Решение, правильно работающее только для случаев, когда n ≤ 104, будет оцениваться в 40 баллов.
Решение, правильно работающее только для случаев, когда n ≤ 109, будет оцениваться в 60 баллов.
Напишите пж, на каком языке сделаете. Желательно питон.
Ответы
Ответ дал:
0
Вот код на Питоне твоего задания:
def find_coordinates(n):
k = int((n ** 0.5 - 1) / 2)
start_of_ring = 1 + 4 * k * (k + 1)
side_lenght = 2 * k + 1
offset = n - start_of_ring
if offset < side_length:
return k + 1, offset + 1
elif offset < 2 * side_length:
return side_length - offset, k + 1
elif offset < 3 * side_length:
return -k - 1, side_length - offset + side_length
else:
return offset - 3 * side_length - k - 1, -k - 1
n = int(input())
row, col = find_coordinates(n)
print(row, col)
Вас заинтересует
3 месяца назад
3 месяца назад
3 месяца назад
3 месяца назад
1 год назад
1 год назад