Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,871

Перевернутая башня

24.02.2023, 13:08. Показов 1303. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вавилонцы решили построить удивительную башню - расширяющуюся кверху и содержащую бесконечное число этажей и комнат. Она устроена следующим образом - на первом этаже одна комната, затем идет два этажа на каждом из которых по две комнаты, затем идёт три этажа, на каждом из которых по три комнаты и так далее:
... ... ...
15 16 17 18
12 13 14
9 10 11
6 7 8
4 5
2 3
1
Эту башню решили оборудовать лифтом - и вот задача: нужно научится по номеру комнаты определять, на каком этаже она находится и какая она по счету слева на этом этаже. Дано целое число - номер комнаты. Вывести два целых числа — номер этажа и ее порядковый номер слева на этаже.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.02.2023, 13:08
Ответы с готовыми решениями:

Останкинская башня
Останкинская телебашня вещает в эфир радиоволны дециметрового диапазона. Дальность приёма в условиях прямой видимости вычисляется по...

Башня Бурана
Здравствуйте. Помогите,пж,решить задачу: Бурана ограничение по времени на тест 0.5 секунд ограничение по памяти на тест 256...

Решение задачи "Ханойская башня" на 64 диска через if и for
Доброго времени суток! Не подскажете, как можно написать код, который смог бы выполнить задачу про ханойские башни без использования...

12
6 / 3 / 3
Регистрация: 24.02.2023
Сообщений: 8
24.02.2023, 16:38
Для решения этой задачи необходимо определить формулы для вычисления номера этажа и порядкового номера комнаты слева на этаже по ее номеру.

Для вычисления номера этажа можно воспользоваться следующей формулой:
floor(sqrt(2n - 1/4) - 1/2)
где n - номер комнаты, floor - функция округления до ближайшего целого в меньшую сторону.

Для вычисления порядкового номера комнаты слева на этаже можно воспользоваться следующей формулой:
n - (k^2 - k + 1)
где n - номер комнаты, k - номер этажа по формуле выше.

Например, для номера комнаты 17:
k = floor(sqrt(2 * 17 - 1/4) - 1/2) = 4
порядковый номер комнаты на этаже:
17 - (4^2 - 4 + 1) = 6
Таким образом, комната с номером 17 находится на 5 этаже (последний этаж с 5 комнатами), и является шестой слева на этом этаже.

Для более общего случая, решение может быть записано в виде функции на языке программирования, например, на Python:

Python
1
2
3
4
5
6
7
import math
 
def elevator(n):
    k = math.floor(math.sqrt(2 * n - 1/4) - 1/2)
    floor = k + 1
    room = n - (k**2 - k + 1)
    return (floor, room)
где n - номер комнаты, а функция elevator(n) возвращает кортеж из двух целых чисел: номер этажа и порядковый номер комнаты слева на этаже.
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
24.02.2023, 18:32
Цитата Сообщение от titovmark97 Посмотреть сообщение
Таким образом, комната с номером 17 находится на 5 этаже (последний этаж с 5 комнатами), и является шестой слева на этом этаже.
Но вот мы смотрим на пример из первого поста и явно видим там, что комната 17 это третья комната на седьмом этаже (а седьмой этаж это первый из этажей с 4 комнатами).
Что-то не сходится.

Добавлено через 5 минут
Да и функция немножко расходится с описанием:
Python
1
2
3
4
5
6
7
8
9
10
11
In [26]: import math
    ...: 
    ...: 
    ...: def elevator(n):
    ...:     k = math.floor(math.sqrt(2 * n - 1 / 4) - 1 / 2)
    ...:     floor = k + 1
    ...:     room = n - (k**2 - k + 1)
    ...:     return (floor, room)
 
In [27]: elevator(17)
Out[27]: (6, -4)
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
24.02.2023, 18:39
Если номер квартиры не слишком большой:
Python
1
2
3
4
5
6
7
8
9
ap = 1234567890
n = 1
floor = 0
while ap >  n*n:
    floor += n
    ap -= n*n
    n += 1
 
print(floor + (ap + n - 1)//n, ap%n or n)
0
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,871
24.02.2023, 19:46  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
N = 10003423
floor = 1
room = 1
answer_floor = 0
answer_room = None
while N > 0:
    for current_floor in range(floor):
        answer_floor += 1
    for current_room in range(room):
        N -= 1
        if N == 0:
            answer_room = current_room + 1
            break
        if N == 0:
            break
        floor += 1
        room += 1
print(answer_floor, answer_room)
0
Вирусоборец
 Аватар для thyrex
14439 / 7481 / 1579
Регистрация: 06.09.2009
Сообщений: 27,119
24.02.2023, 19:58
Whitecolor, а теперь сравните время работы своего алгоритма и алгоритма от Gdez на примере N = 1234567890. Не говоря уже о ещё больших числах.
0
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,871
24.02.2023, 20:01  [ТС]
thyrex, я не говорил, что это решение является идеальным
0
Вирусоборец
 Аватар для thyrex
14439 / 7481 / 1579
Регистрация: 06.09.2009
Сообщений: 27,119
24.02.2023, 20:06
Whitecolor, какой вообще смысл в том, что после идеальных и быстрых решений, которые предлагаются в созданных Вами же темах, Вы зачем-то выкладываете некое своё (иногда даже несколько). Попытка набить сообщения и репутацию?
0
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,871
24.02.2023, 20:40  [ТС]
Цитата Сообщение от thyrex Посмотреть сообщение
Вы зачем-то выкладываете некое своё (иногда даже несколько).
Пускай будет, может оно тоже кому-то пригодиться!!

Не по теме:

Это Вы уже себе набили почти 25 тысяч сообщений таким вопросами зачем то, почему это!!

0
24.02.2023, 21:10

Не по теме:

Цитата Сообщение от Whitecolor Посмотреть сообщение
Это Вы уже себе набили почти 25 тысяч сообщений таким вопросами зачем то, почему это!!
Да будет Вам известно - основная масса моих сообщений в совершенно ином разделе

0
1187 / 757 / 127
Регистрация: 10.03.2012
Сообщений: 4,871
24.02.2023, 21:18  [ТС]
Цитата Сообщение от thyrex Посмотреть сообщение
Да будет Вам известно - основная масса моих сообщений в совершенно ином разделе

Не по теме:

Хорошо, я учту, если будет в этом потребность

0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
25.02.2023, 07:30
Цитата Сообщение от thyrex Посмотреть сообщение
после идеальных и быстрых решений
Решение Gdez не идеальное. Хорошая попытка была в первом посте, но видимо там магнитная буря произошла и в мозгах ИИ случился сбой, а передаст, увы, даже понять не захотел.
Whitecolor, приятно видеть, что человек участвует в своей теме, приводит собственные попытки (особенно если свои, а не загугленные), пусть даже не идеальные.

Добавлено через 9 минут
Было бы еще лучше, если бы давали дополнительно оценку своему коду, с учетом уже приведенных ранее. Возможно и подобных недоразумений не было бы.
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
25.02.2023, 08:29
thyrex, а кто предложил идеальное решение? я не вижу решений в этой теме.

Не по теме:

Whitecolor, ну вот молодец. начал решать более менее задачи по сложнее.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2023, 08:29
Помогаю со студенческими работами здесь

Башня
Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них настоящую крепость — последовательность из N столбиков,...

Башня
Вот сейчас думаю, не могу решить следующую задачу: Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них...

Ханойская башня
Уважаемые, киберфорумчане! Не знаю уже к кому идти, никак не решатся задачи. Весь гугл прочесан вдоль и поперек. Классическую интерпретацию...

Задача "Башня"
Башня Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них настоящую крепость — последовательность из N...

Перевернутая таблица
Как можно первернуть таблицу, с помощью какого компонента? У нас поля таблицы идут сверху, записи слева. А мне необходимо наоборот. Слева...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru