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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.04.2008, 19:30   #1
МаксимNEWProgramm
Пользователь
 
Аватар для МаксимNEWProgramm
 
Регистрация: 04.04.2008
Сообщений: 57
Счастье Логическая задача на паскале

На расстоянии N шагов от магазина стоит человек. Каждую минуту он выбирает, куда сделать шаг: к магазину или в противоположном направлении.

Требуется написать программу, которая определит, сколькими способами он может попасть в магазин, пройдя ровно K шагов.

Входные данные
Входной файл INPUT.TXT содержит 2 числа n и k, записанные через пробел. Известно, что 1 <= N <= K <= 37.

Выходные данные
Выходной файл OUTPUT.TXT должен содержать одно число – количество способов попадания в магазин.

Примеры
№ INPUT.TXT OUTPUT.TXT
1 2 4 2 2
2 5 5 1 1
Программированине-это не очередная пара, а искуство показать себя!!!
МаксимNEWProgramm вне форума
Старый 09.04.2008, 19:33   #2
МаксимNEWProgramm
Пользователь
 
Аватар для МаксимNEWProgramm
 
Регистрация: 04.04.2008
Сообщений: 57
По умолчанию

Пардон пример с ошибкой
№ INPUT.TXT
1 2 4 2
2 5 5 1
OUTPUT.TXT
2
1
Программированине-это не очередная пара, а искуство показать себя!!!
МаксимNEWProgramm вне форума
Старый 10.04.2008, 13:50   #3
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Интересная задачка)). Шаг он может сделать в двух направлениях либо в сторону магазина либо в противоположную сторону. Тогда мне на ум приходит ввести знаки + если к магазину и - если с против сторону.
А вот тут чесно не понял
Цитата:
Требуется написать программу, которая определит, сколькими способами он может попасть в магазин, пройдя ровно K шагов.
Когда имеется ввиду "способы попадания в магазин" , то что подразумевается?
Gauss вне форума
Старый 10.04.2008, 14:19   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Известно, что 1 <= N <= K <= 37.
Это с этим:
Цитата:
1 2 4 2
2 5 5 1
Ну никак не согласуется, как это 1<=4<=2?
I'm learning to live...
Stilet вне форума
Старый 11.04.2008, 09:55   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

в первом примере K=9 во втором К=13

предположим:
N=Нечетное
K=Четное
Такое может быть? Или на оборот?
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума
Старый 11.04.2008, 10:20   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

решение - обычная рекурсия.

L = N; P = 0; S = ''; <- мы стоим на N шагов от магазина

НАЧАЛО(L, P, S);

a) Если L = 0 и P = K - вывод S и выход (это допустимый путь)
b) Если P > K больше шагов делать нельзя - выход

Возможны два варианта :

НАЧАЛО(L+1, P+1, S+"-1") - шаг назад
НАЧАЛО(L-1, P+1, S+"+1") - шаг вперед

-----------------
Если K, N будут некорректны, то просто не будет напечатано путей.
alexBlack вне форума
Старый 11.04.2008, 11:16   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
предположим:
N=Нечетное
K=Четное
Такое может быть? Или на оборот?
Мне кажется четность самих чисел роли не играет, а вот четность их разности - да. Если их разность нечетная, этот шатающийся товарищ так и не опохмелится.
puporev вне форума
Старый 11.04.2008, 14:22   #8
МаксимNEWProgramm
Пользователь
 
Аватар для МаксимNEWProgramm
 
Регистрация: 04.04.2008
Сообщений: 57
По умолчанию

Вы не совсем поняли меня ,т.е я не совсем правильно вам обьяснил!Сколькими спосабами можно добраться до магазина пройдя всего K шагов? т.е он не может двигаться назат более чем (K div 2)-1 шагов
и K шагов в перед, но если он делает шак назад ему нужно пройти на два шага вперед больше, так вот как определить сколько шагов ему делать назад и когда?
Программированине-это не очередная пара, а искуство показать себя!!!
МаксимNEWProgramm вне форума
Старый 11.04.2008, 14:50   #9
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Я же говорю:

Код:
var N, K:integer;

procedure getSteps(L, P:integer; S:String);
begin
   if (L = 0) and (P = K) then begin
      writeLn(S)
   end  else begin
      if (L > 0) and (P < K) then begin
         getSteps(L-1, P+1, S+'-1');
         getSteps(L+1, P+1, S+'+1');
      end;
   end;
end;

begin
   N := 6; K := 10;
   getSteps(N, 0, '');
...
печатает все возможные варианты
alexBlack вне форума
Старый 11.04.2008, 15:36   #10
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Я прогнал программу, все работает только надо в строчках
Код:
if (L > 0) and (P < K) then begin  
         getSteps(L-1, P+1, S+'-1');   
         getSteps(L+1, P+1, S+'+1');
'-1' заменить на '+1' и наоборот, а то этот товарищ упорно удаляется от магазина и опять ему ничего не светит.
puporev вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логическая задача Senator Помощь студентам 1 06.06.2008 04:01
Задача на Паскале stscolt Помощь студентам 1 29.04.2008 20:52
задача в паскале __k1ll3r__ Помощь студентам 3 27.12.2007 05:41