Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 18.12.2008, 17:48   #1 (permalink)
PeGaSuS
Новичок
 
Регистрация: 15.12.2008
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Thumbs up Программирование на Паскале ))))

Приветик всем!!!
вот задача которая была на городской олимпиаде 2007 года не знаю кто может решить этоо:

Зайчик по дорожке длиной N может прыгать только вперед. Длина прыжка зайчика не должна превышать K(1>=K, N<=100). Требуется вывести число возможных способов для прохождения зайчиком всей пути.
Например
При N=3, K=2 для зайчика возможны след>> прыжки : 1,1,1 1,2 2,1
В этом случае ответ равен 3.
Входные данные: N и K.

Кто сможет написать please помогите!!
а вообще кому не лень можете добавлять интересные задачки))
PeGaSuS вне форума   Ответить с цитированием

Старый 18.12.2008, 17:48
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Наверняка в этих темах есть интересующий вас ответ

Программирование в институте, что это?
Программирование
Программирование
Программирование: с чего начать?

Старый 18.12.2008, 18:00   #2 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

Я в этом году тоже ходил на олимпиаду по информатике думал мож че из паскаля вспомню но нет фиг посидели поржали над задачками и ушли
Dram вне форума   Ответить с цитированием
Старый 09.01.2009, 17:48   #3 (permalink)
PeGaSuS
Новичок
 
Регистрация: 15.12.2008
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation

уж очень они смешные были????
PeGaSuS вне форума   Ответить с цитированием
Старый 09.01.2009, 18:44   #4 (permalink)
Darkcosinus
Member
 
Регистрация: 25.04.2008
Сообщений: 238
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Меня посылали на олимпиаду по программированию, так там проверяющие знали только BASIC, это полный пейсец. Я написал им полностью все алгоритмы на C++ и получил 0 баллов. Больше на олимпиады не ходил.

Единственные задачки, которые представляют интерес - это реальные задания из проектов, за которые платятся деньги Учебные задачи обычно высосаны из пальца и очень редко близки к программерским будням.

А задачка интересная... нужно найти все комбинации чисел, не превышающих K, которые в сумме дают N.

Задача, кстати, имеет решение даже при K>N. На этот случай нужно ввести, допустим, P, которое равно MIN(K,N).

Максимальное число прыжков соответственно будет при K=1 и равно N.

Думаю, решать стоит перебором "в лоб"... Хотя если олимпиада универская, можно и по формулам комбинаторики
Идея перебора такова:
0) Создаём переменную для кол-ва вариантов, допустим I=0
1) Вариантов первого прыжка у нас P. I=I+P
2) Для каждого из P прыжков считаем оставшееся расстояние D=(N-P)
3) Если D=0, то выходим из этой ветки
4) Если D>0, то считаем кол-во вариантов для следующего прыжка. Их будет V=MIN(D,P). I=I+V

Видно, что шаги 1 и 4 идентичны, можно оформить это всё в виде рекурсии и начинать с I=0 и D=P.
Мысли пока сумбурные, может и напутал чего...

Последний раз редактировалось Darkcosinus; 09.01.2009 в 18:53
Darkcosinus вне форума   Ответить с цитированием
Старый 10.01.2009, 08:48   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
s:=n!/(n-1)!
Алекс, Вы простите великодушно, в задачу не вникал, но то, что Вы написали, есть просто s:=n . Зачем же так мудрёно?
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 10.01.2009, 11:32   #6 (permalink)
Darkcosinus
Member
 
Регистрация: 25.04.2008
Сообщений: 238
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
s:=n!/(n-1)!
s=n? Это формула чего?
Тут простой комбинаторикой не обойтись. Если уж брать комбинаторику, тогда формулу сочетания с повторениями, и всё оно примет вид

сумма ((X+N-1)! / ((X-1)! * N!))
где X принимает значения от 1 до P

Но по этой формуле получим только все варианты движения зайца. Естественно далеко не все они нам подойдут, т.к. многие пути будут заведомо длиннее N. А как отсеивать без прямого перебора, я не представляю.

Поэтому всё-таки не думаю, что комбинаторика тут жизнеспособна.
Darkcosinus вне форума   Ответить с цитированием
Старый 11.01.2009, 15:48   #7 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Извиняюсь, ошибочка вышла, исправил, удалил формулу.
Вник в задачу, сочетание с повторениями здесь тоже не пойдет. Но обычно такого рода задания должны решаться более-менее простым способом. Иначе участники не успеют ничего решить. Так что должно быть простое решение.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 20.01.2009, 12:19   #8 (permalink)
PeGaSuS
Новичок
 
Регистрация: 15.12.2008
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Wink

thankS everybody. если честно я еще не смогла вникнуть в то о чем вы толкуете((
PeGaSuS вне форума   Ответить с цитированием
Старый 20.01.2009, 12:56   #9 (permalink)
Darkcosinus
Member
 
Регистрация: 25.04.2008
Сообщений: 238
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Простое решение - перебор, алгоритм которого я написал.

Кстати кому интересно, вот задачка ещё:
Написать наиболее оптимальным образом функцию, которая возвращает 5 при переданном ей параметре 3, и возвращает 3 при параметре 5
Сразу скажу, что очевидные if или case не являются оптимальными )
Darkcosinus вне форума   Ответить с цитированием
Старый 20.01.2009, 14:13   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Darkcosinus Посмотреть сообщение
Простое решение - перебор, алгоритм которого я написал.

Кстати кому интересно, вот задачка ещё:
Написать наиболее оптимальным образом функцию, которая возвращает 5 при переданном ей параметре 3, и возвращает 3 при параметре 5
Сразу скажу, что очевидные if или case не являются оптимальными )
Ну это мы еще можем: y = 15 : x . Во!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:25.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.