Тут вообще есть программисты/математики? - Страница 2 - Архив - Strategium.ru Перейти к содержимому

Тут вообще есть программисты/математики?

Рекомендованные сообщения

Diplomate
Улитка ползёт по вертикальному шесту высотой h метров, поднимаясь за день на a метров, а за ночь спускаясь на b метров. На какой день улитка доползёт до вершины шеста?

Программа получает на вход натуральные числа h, a, b и должна вывести одно натуральное число. Гарантируется, что a>b.

При решении этой задачи нельзя пользоваться условной инструкцией if и циклами.

Задача не столько на программирование, сколько на умение составить правильную формулу. Мне необходимо решение этой задачи. Заведомо неверные решения не предлагать(h/(A-b}, к примеру). Если не понимаете, о чем тема — идите прочь и не разводите флуд. Интересно, есть ли тут хоть кто-нибудь, кто сможет решить даже эту "простую" задачу?

Изменено пользователем Diplomate
Ссылка на комментарий

Закреплённые сообщения
Diplomate
А в чем именно проблема? Разве int не хранит целочисленные значения от -32к до 32к, при подсчете округление произойдет автоматически по воле компилятора, не?

Переменные integer в паскале делить нельзя. Только div(целочисленное деление). А введение дробной переменной тоже не особо поможет, так как мне нужно сделать так, чтобы значение "2" оставалось "2", а вот "2.1" становилось "3".

Ссылка на комментарий

Kronic
Это неверное решение. Для примера (10;5;1) оно выдает ответ 2, хотя правильный ответ 3.

Всё она правильно выдает

1 + 5 div 4 + (5 mod 4 + 4 - 1) div 4

1 + 1 + (1 + 4 - 1) div 4

2 + 1

3 - Ответ

Ссылка на комментарий

Isaac New
ОффтопНажмите здесь!
 1) То есть ты признаешь, что пришел сюда ради кривляний и истерик? Вот ради этого я и написал в шапке темы: "Не оффтопить".

2) Вот пример той самой истерики, о которой я говорил в первой части сообщения.

[Cкрыть]

Я сюда пришёл, когда увидел название темы. Пришёл, прочитал первый пост - и у меня не возникло желание тебе помогать

Изменено пользователем Isaac New
Ссылка на комментарий

MaslovRG

Div - цикл? Лал ват?

Ссылка на комментарий

Diplomate
Всё она правильно выдает

1 + 5 div 4 + (5 mod 4 + 4 - 1) div 4

1 + 1 + (1 + 4 - 1) div 4

2 + 1

3 - Ответ

Да, все-таки она работает. Осталось только понять принцип ее действия.

Судя по всему, этого смысла в ней нет. Придется запомнить.

Я сюда пришёл, когда увидел название темы. Пришёл, прочитал первый пост - и у меня не возникло желание тебе помогать

<!--private_data=0-->

Да покинь ты тему уже, наконец. Если не нравятся мои условия — не пиши здесь свои флудерские посты.

Div - цикл? Лал ват?

А кто сказал, что это цикл?

Изменено пользователем Diplomate
Ссылка на комментарий

Kronic
Да, все-таки она работает. Осталось только понять принцип ее действия.

А почему ты в самом начале делишь 5 на 4? У меня значение перем

h0:=h-a;

shag:=a-b;

h0:=10 - 5 = 5

shag:= 5 - 1 = 4

Получается

h0 div shag = 5 div 4

h0 mod shag = 5 mod 4

Изменено пользователем Kronic
Ссылка на комментарий

Diplomate
h0:=h-a;

shag:=a-b;

h0:=10 - 5 = 5

shag:= 5 - 1 = 4

Получается

h0 div shag = 5 div 4

h0 mod shag = 5 mod 4

Это я забыл стереть. Сверял по тому, что переписал(а переписал я неверно :) ).

Ссылка на комментарий

Isaac New
Да покинь ты тему уже, наконец. Если не нравятся мои условия — не пиши здесь свои флудерские посты.

Покинуть тему? А почему бы тебе не покинуть форум? Ты даже в интернетовский код прочитать не смог. Наверно, проблема всё-таки в твоей обучаемости

Ссылка на комментарий

Diplomate
Покинуть тему? А почему бы тебе не покинуть форум? Ты даже в интернетовский код прочитать не смог. Наверно, проблема всё-таки в твоей обучаемости

Какова же тогда твоя обучаемость, если я в шапке темы четко написал о том, что флуд мне тут не нужен? Я тебе это раз 5 повторил, но ты этого так и не понял. Мою обучаемость ты не знаешь, но она уж повыше твоей будет. И почему это я должен покидать форум из-за мнения какого-то псевдоматематика?

Изменено пользователем Diplomate
Ссылка на комментарий

Isaac New
Какова же тогда твоя обучаемость, если я в шапке темы четко написал о том, что флуд мне тут не нужен?

Во-первых: то, что он не нужен тебе - ещё ничего не говорит

Во-вторых: то, что ты называешь это флудом - ещё ничего не говорит

В-третьих: уж поверь, если ты захотел помериться со мной достижениями - то не кричи о том, что они у тебя больше, а предъявляй их.

Ссылка на комментарий

Васильевич
96d9811a48a0.png Изменено пользователем Васильевич
Ссылка на комментарий

Detech
Да, все-таки она работает. Осталось только понять принцип ее действия.

Судя по всему, этого смысла в ней нет. Придется запомнить.

Смысл очень простой и примитивный...

Сначала программа вычитает из высоты движение вперед. Вполне очевидно (это логическая задача которую не все понимают) что на последний день улитка доползет до цели даже если ее совокупный шаг меньше расстояния.

т.е. Если улитке осталось проползти 3 метра, а она ползет 5 вверх и 4 вниз (шаг - 1) - то она все равно на этот день доползет несмотря на то что шаг меньше чем оставшееся расстояние.

То есть условно мы разделяем задачу на 2:

1. Некоторое расстояние улитка ползет с шагом (вверх/вниз)

2. На некий последний день она ползет только вверх и достигает цели.

Расстояние которое она проползет в фазе 1 - = (H - A) (в случае 10,5,1 - как только ей останется меньше 5 метров - то есть меньше чем (10-5) - на следующий день она достигнет цели)

На фазе 2 она в любом варианте затратит только 1 день.

Соотвественно нашим ответом будет число, которое равно: 1(это время затраченное на последний шаг) + количество дней на преодоление остального (H-A) расстояния со скоростью шага (A-B )

Собстно там и таков ответ в формуле: 1 + оставшееся расстояние поделенное на шаг

Оставшееся расстояние поделенное на шаг имеет ввид полустрашной формулы из 2 частей, потому как автор решил не использовать функции округления вверх (ведь если у нас получается 4.1 дней - это на самом деле 5 дней) и реализовать округление путем целочисленных делений и вычислений остатков от деления.

Если тебе нужно понять что конкретно там в хвосте - то в первой его половине он целочисленно делит (вычисляет целую часть от деления), а во второй части - вычисляет остаток от деления, и прибавляя к нему делитель уменьшенный на единицу - снова делит (это для того чтобы понять есть ли у нас вообще дробная часть при делении).

Хвост кстати не очень удачный - он может соврать при дробных числах. Например для данных (9.5м, 5м, 1м) он выдаст 2, хотя правильным ответом все еще является 3. Проще было бы применить округление вверх, если конечно это не запрещено условиями задачи.

Если совсем уж разжевать - то ответом будет:

d = 1+ROUNDUP((H-A)/(A-B )), где

1 - это количество дней которые нужно потратить улитке чтобы преодолеть последние А метров

H-A - это расстояние которое нужно преодолеть улитке во все дни кроме последнего

A-B - шаг улитки, расстояние которое она преодолевает за день

(H-A)/(A-B ) - количество дней (возможно дробное) которое нужно улитке чтобы преодолеть нужное расстояние до "последнего рывка"

ROUNDUP - функция округления вверх в твоем языке программирования (я хз какой ты используешь) - нужна для того чтобы дополнить количество дней до полных

з.ы. Откуда столько паскаля? у нас в универах до сих пор не отказались от его изучения? :huh:

Значит округляй в большую сторону. Почувствуй себя сатаной.

Округление той формулы вверх не даст правильной формулы - то что тут ответ сойдется является лишь совпадением. Легко проверить на вот таком наборе данных:

30м, 5м, 4м.

Та формула даст ответ 30 дней, и тут нечего округлять. В то время как правильным ответом будет 26 дней.

А как это сделать, если такой функции в паскале нет? С if'ом это делается легко, без него же — никак. Прибавлять один не вариант, так как может получиться целое число(к примеру, 2, его же мы не будем в 3 превращать?).

Прибавляй 0.499999999 и округляй.

Изменено пользователем Detech
Ссылка на комментарий

xa6apuk

Инфи, тут форум стратегических игр, тут люди по другим инетерсам общаются. Есть множество других форумов по той тематике 1 поста на которых ты мог свободно получить правильный ответ.

Ссылка на комментарий

Наполек
Инфи, тут форум стратегических игр, тут люди по другим инетерсам общаются. Есть множество других форумов по той тематике 1 поста на которых ты мог свободно получить правильный ответ.

вот скопируй это свое сообщение и под каждым постом о геях его вставляй

Ссылка на комментарий

Diplomate
Во-первых: то, что он не нужен тебе - ещё ничего не говорит

Во-вторых: то, что ты называешь это флудом - ещё ничего не говорит

В-третьих: уж поверь, если ты захотел помериться со мной достижениями - то не кричи о том, что они у тебя больше, а предъявляй их.

Я на форуме не буду тебе писать свои достижения.

Инфи, тут форум стратегических игр, тут люди по другим инетерсам общаются. Есть множество других форумов по той тематике 1 поста на которых ты мог свободно получить правильный ответ.

Тем не менее, ответ я получил только здесь.

Detech'у спасибо за объяснение.

з.ы. Откуда столько паскаля? у нас в универах до сих пор не отказались от его изучения? :huh:

Вообще-то я учусь в 8 классе.

Прибавляй 0.499999999 и округляй.

Да, что-то до такого не додумался :)

H-A - это расстояние которое нужно преодолеть улитке во все дни кроме последнего

Вероятно, тут имелось в виду H-b?

Изменено пользователем Diplomate
Ссылка на комментарий

Isaac New
Я на форуме не буду тебе писать свои достижения.

По сути я базарил нескем

Тем не менее, ответ я получил только здесь.

Ответ ты получил ещё в гугле, просто не поверил в него и не захотел в этом разобраться

Ссылка на комментарий

Diplomate
По сути я базарил нескем

Ответ ты получил ещё в гугле, просто не поверил в него и не захотел в этом разобраться

Что такое "нескем"?

Мне, в отличие от тебя, важно не скопировать с Интернета готовую формулу, а разобраться в ней и понять, как это делается. Благодаря Detech'у, мне это удалось. Вот наиболее простой, как мне кажется, код этой программы в Паскале.

h:=h-b;

v:=a-b;

s:=round(h/v+0.499999).

Ссылка на комментарий

Detech
Вероятно, тут имелось в виду H-b?

Нет, именно H - A

Смотри, допустим нам нужно проползти 10 метров, при этом мы ползем днем по 3 метра вверх, а ночью по 2 метра нас сносит вниз.

То есть H = 10, A = 3, B = 2.

Вот таким вверх/вниз мы будем ползти первые 7 метров, потому как как только мы окажемся на 7 метрах или выше - за последний день мы проползем 3 метра и окажемся у точки без необходимости ждать ночи когда нас снесет.

То есть первые (10-3)=7 метров мы ползем методом "вверх/вниз", а последние 3 метра преодолеваем за последний день методом "только вверх"

То есть 10(H) - 3(A) = 7 (H-A)

Ссылка на комментарий

Isaac New
Что такое "нескем"?

Ну вот. Ты даже таких элементарных вещей не знаешь.

Мне, в отличие от тебя, важно не скопировать с Интернета готовую формулу, а разобраться в ней и понять, как это делается. Благодаря Detech'у, мне это удалось. Вот наиболее простой, как мне кажется, код этой программы в Паскале.

h:=h-b;

v:=a-b;

s:=round(h/v+0.499999).

Лол. И ты считаешь, что ты разобрался? Мне тебя стало жаль.

a=3, b=2, h=1. У тебя улитка на нулевой день доползает

h=4, b=6, a=7. А тут вообще на минус первый

Разборался он

Ссылка на комментарий

Гость
Эта тема закрыта для публикации сообщений.
  • Ответы 53
  • Создано
  • Последний ответ
  • Просмотры 11933

Лучшие авторы в этой теме

  • Diplomate

    18

  • Isaac New

    14

  • Kronic

    4

  • йцукенгшщз

    3

  • Vladimir DP

    3

  • Detech

    2

  • MAK

    2

  • TrueSight

    2

  • MaslovRG

    1

  • Наполек

    1

  • xa6apuk

    1

  • Freezze

    1

  • Пися Камушкин

    1

  • Васильевич

    1

Лучшие авторы в этой теме

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу


Copyright © 2008-2024 Strategium.ru Powered by Invision Community

×
×
  • Создать...