• Предмет: Информатика
  • Автор: zhuravskaya3872
  • Вопрос задан 3 месяца назад

Бесконечную таблицу, строки и столбцы которой пронумерованы целыми числами начиная с 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)

Вас заинтересует