Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2015, 09:16   #1
SweetyGirl
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 8
По умолчанию Задача - может ли принц мечом срубить все головы дракона

Здравствуйте, учусь на сис админа и впаяли программирование. Очень нужна помощь 3 дня до защиты программной работы
Принц и дракон, помогите плиззз буду очень благодарна!!!

Волшебник Мерлин продает волшебные мечи принцам, желающим убить дракона. Основная характеристика меча – число драконьих голов, которые он срубает за удар. Основная характеристика дракона – число голов, которые он может отрастить за сеанс регенерации. Бои принцев с драконами всегда протекают одинаково – принц атакует, и прячется за щитом; дракон атакует огненным дыханием и регенерирует; так продолжается до тех пор, пока после очередного удара у дракона не кончатся головы. Ясно, впрочем, что не каждым мечом можно победить каждого дракона. Заказ, поступающий Мерлину, всегда содержит число голов дракона и скорость его регенерации. Подсчитайте по известной атакующей силе меча, сможет ли принц убить такого дракона таким мечом и, если да, то сколько ударов потребуется.
Входные данные

Единственная строка входного файла INPUT.TXT содержит число N – число голов, которые меч срубает одним ударом. Далее идет число M – число голов дракона. За ним идет K – число голов, которые дракон регенерирует за раз (1 ≤ N, M, K ≤ 105). Все числа разделены пробелом.
Выходные данные

В выходной файл OUTPUT.TXT выведите число ударов, которые необходимо нанести принцу, чтобы убить дракона, если это возможно. Если таким мечом убить дракона нельзя, то следует вывести «NO».
input 3 6 2 output 4
SweetyGirl вне форума Ответить с цитированием
Старый 10.04.2015, 12:08   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если нет ограничений по времени и нет желания решать задачу оптимально (вывести формулу), тогда можно поступить очень просто - в цикле вычитать из числа голов M число срубленных N и прибавлять K, пока M больше нуля.
если М увеличивается - цикл сразу прерывать и выводить "NO"
иначе ответом будет число итераций цикла.

циклы будущий сисадмин писать уже научилась?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.04.2015, 12:12   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

шобы снести дракону головы меч должен за удар сносить > чем регенерируется, если данное условие выполняется то простой цикл
пока M>0
M:=M-N+K
счетчик=счетчик+1
конец пока
вывод счетчик
enjoy
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 10.04.2015, 12:49   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Немного не так. Сначала отнимать N и только если результат больше нуля тогда прибавлять K. Типа такого:
Код:
  i:=0;
  repeat
    Inc(i);
    Dec(M,N);
    if M>0 then Inc(M,K);
  until M<=0;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.04.2015, 13:11   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
if K>N then otvet:='NO'
else if (K=N) and (M>K) then otvet:='NO'
else
Цитата:
и нет желания решать задачу оптимально (вывести формулу)
оно есть это желание
Код:
otvet:=( M+(N-K-1) ) div (N-K);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 10.04.2015, 13:17   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
if K>N then otvet:='NO'
это неверно.
почему - ответил Аватар чуть выше...

p.s. попробуйте ваш код для 1 1 100, например
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.04.2015, 16:25   #7
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Код:
strike := 0;
if (k > n) and (n < m) then
  // выводим NO, т.к. количество отрубаемых голов меньше регенерируемых 
else
begin
  while m >= 1 do
  begin
    m := m - n;
    // рыцарь отрубает дракону n голов. M голов осталось
    if m < 0 then
      break;
    m := m + k;
    // дракон регенерирует k голов. M голов стало.
  end;
// выводим strike
end;
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 10.04.2015 в 16:28.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 10.04.2015, 16:56   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
Код:
    m := m - n;
    // рыцарь отрубает дракону n голов. M голов осталось
    if m < 0 then
      break;
тут разве не
if m <= 0 надо ?

ну и переменную strike неплохо бы в цикле наращивать
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.04.2015, 16:59   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Уточнил на все случаи
Код:
  i:=0;
  T:=M;
  repeat
    Inc(i);
    Dec(M,N);
    if M>0 then Inc(M,K);
  until (M<=0) or (M>=T);
  if M>=T then ни когда
          else i-число ударов
Можно и формулой, лень придумывать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.04.2015, 17:20   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Уточнил на все случаи
да, согласен.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ifframe запрещен на изменение спецификацией, но может все же.... Лубышев HTML и CSS 3 18.10.2013 14:56
Pascal работа с циклами (задача про S-ножку и К-главого дракона) anton.dasuik Помощь студентам 2 02.03.2013 23:52
Ищу светлые головы) 7te4enie Фриланс 1 06.04.2012 11:50
Поиск фигур, которые сможет срубить ферзь kristy08 Паскаль, Turbo Pascal, PascalABC.NET 1 13.01.2012 22:23