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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2013, 22:27   #1
Luckycat
 
Регистрация: 08.03.2013
Сообщений: 3
Печаль Комбинаторика подъёма на лестницу

Всем привет! Имеется лестница из 10 ступенек, подниматься можно наступая на каждую ступеньку или через одну. Вывести на экран все варианты поднятия на эту лестницу следующим видом:
1111111111 - наступили на каждую ступеньку,
1010101010 - шагали через одну.
Т.е. 1 наступили на ступеньку, 0 - нет!
Нельзя перепрыгивать через 2 ступеньки и более... только через одну! не может быть вот таких записей:
1000011111
0010010011
Заранее спасибо!
Luckycat вне форума Ответить с цитированием
Старый 04.06.2013, 22:54   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,303
По умолчанию

Решение в лоб:
Код:
var
  i, j: integer;
  t, zero: boolean;

begin
  for i := 0 to 1023 do
  begin
    j := 0;
    t := true;
    zero := false;
    while t and (j < 10) do
    begin
      if ((i shr j) and 1 = 0) and zero then
        t := false;
      zero := ((i shr j) and 1 = 0);
      inc(j);
    end;
    if t then
    begin
      for j := 0 to 9 do
        write((i shr j) and 1);
      writeln;
    end;
  end;
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 05.06.2013, 00:50   #3
Luckycat
 
Регистрация: 08.03.2013
Сообщений: 3
По умолчанию

Спасибо большое! Вы мне очень помогли!
Luckycat вне форума Ответить с цитированием
Старый 05.06.2013, 07:46   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
const
        NumOfStep = 10;
var
        a : array [0..NumOfStep] of Byte;

procedure Print;
var
        i : Integer;

begin
        for i := 1 to NumOfStep do
                Write (a[i]);
        WriteLn
end;

procedure GetNextStep (n : Integer);
begin
        if n > NumOfStep then begin
                Print;
                Exit
        end;

        if a[n-1] = 1 then begin
                a[n] := 0;
                GetNextStep (n+1)
        end;

        a[n] := 1;
        GetNextStep (n+1)
end;


begin
        a[0] := 1;

        GetNextStep (1)
end.
Как-то так..
Poma][a вне форума Ответить с цитированием
Старый 11.06.2013, 17:46   #5
Luckycat
 
Регистрация: 08.03.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Решение в лоб:
Код:
var
  i, j: integer;
  t, zero: boolean;

begin
  for i := 0 to 1023 do
  begin
    j := 0;
    t := true;
    zero := false;
    while t and (j < 10) do
    begin
      if ((i shr j) and 1 = 0) and zero then
        t := false;
      zero := ((i shr j) and 1 = 0);
      inc(j);
    end;
    if t then
    begin
      for j := 0 to 9 do
        write((i shr j) and 1);
      writeln;
    end;
  end;
  readln;
end.
а можешь прокомментировать код? всё работает правильно только я не понимаю как
Luckycat вне форума Ответить с цитированием
Старый 11.06.2013, 18:20   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,303
По умолчанию

Вариант Poma][и универсальнее.

10 ступенек - на каждую по 1 биту (наступал - не наступал).
Нужно перебрать все 10-битные числа (от 0 до 1023, 1023 = 1111111111 в двоичной).
Внутри этого цикла другим циклом проверяем, чтобы не было 2 нулей подряд.
Если проверка завершилась успешно, то побитово выводим текущее число на экран.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
комбинаторика Praud Помощь студентам 3 21.05.2013 12:58
комбинаторика Rahmatillo C++ Builder 1 26.04.2012 01:10
Комбинаторика скромница2012 Паскаль, Turbo Pascal, PascalABC.NET 2 16.04.2012 21:30
Комбинаторика Nikita++ Помощь студентам 2 15.12.2011 19:33
Комбинаторика Dima170792 Помощь студентам 8 20.04.2011 00:01