В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
Марина0506
Марина0506
03.02.2021 19:44 •  Информатика

Сдать решение задачи 7-Таблица Полный : 100
Ограничение времени: 500 мс
Ограничение памяти: 512M
Ограничение размера стека: 64M
Задача 7: Таблица
Бесконечную таблицу, строки и столбцы которой пронумерованы целыми числами начиная с 1 сверху вниз и слева направо, заполняют целыми числами 1, 2, 3 и т.д. Числа выписываются в соседние клетки по границам квадратов увеличивающегося размера (см. рисунок).

Дано число n, определите номер строки и номер столбца, в котором окажется это число.

Входные данные
Программа получает на вход одно целое число n, 1 ≤ n ≤ 1018.

Обратите внимание, что значение n может быть больше, чем возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные числа (тип int64 в языке Pascal, тип long long в C и C++, тип long в Java и C#).

Выходные данные
Программа должна вывести два целых числа: номер строки и номер столбца, в которых находится число n в этой таблице. Запись выводимых чисел должна содержать только цифры, вывод действительных чисел в ответе считается неверным.

Система оценивания
Решение, правильно работающее только для случаев, когда n ≤ 100, будет оцениваться в

Решение, правильно работающее только для случаев, когда n ≤ 104, будет оцениваться в

Решение, правильно работающее только для случаев, когда n ≤ 109, будет оцениваться в

Пример
Ввод

Вывод

15

4 2


Сдать решение задачи 7-Таблица Полный : 100 Ограничение времени: 500 мс Ограничение памяти: 512M Огр

Показать ответ
Ответ:
Serator2006
Serator2006
28.11.2020 17:10

def integerSqrt(n):

  if n < 2:

      return n

  else:

      smallCandidate = integerSqrt(n >> 2) << 1

      largeCandidate = smallCandidate + 1

      if largeCandidate*largeCandidate > n:

          return smallCandidate

      else:

          return largeCandidate

           

n = int(input())

m = integerSqrt(n - 1)

k = (m * (m + 1) + 1)

if m % 2 == 1 :

  if k < n :

      row = m + 1

      col = (m + 1) - (n - k)

  elif k == n :

      row = m + 1

      col = m + 1

  else :

      col = m + 1

      row = (m + 1) + (n - k)

else :

  if k < n :

      col = m + 1

      row = (m + 1) - (n - k)

  elif k == n :

      row = m + 1

      col = m + 1

  else :

      row = m + 1

      col = (m+1)+(n-k)

print(row, col)

Объяснение:

puthon3

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота