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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2014, 01:10   #1
ДмитрийПО
Новичок
Джуниор
 
Регистрация: 25.06.2014
Сообщений: 1
По умолчанию Шифрование текста

Помогите найти решение к этой задаче(желательно код):
В сообщении, состоящем из одних русских букв и пробелов, каждую букву заменили ее порядковым номером в русском алфавите (А - 1, Б - 2, ..., Я - 33), а символ пробел - нулем. Требуется написать программу, которая по заданной последовательности цифр (не более 100) находит количество исходных сообщений, из которых она могла бы получиться.
Очень надеюсь на вашу помощь!
ДмитрийПО вне форума Ответить с цитированием
Старый 25.06.2014, 01:55   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Зачем искать, время терять? Быстрее же написать его
В простейшем случае понадобится 3 глобальных переменных (для строки, для длины строки, для счетчика исходных сообщений) и немного знаний о рекурсии. Имея строку и текущий индекс в ней (сначала равный единице), "откусываем" 1 символ, а если возможно, то два. После чего опять вызываем ту же функцию, но с новым индексом, продвигаясь по строке (вызов осуществляется и после 1, и после 2 "откусанных" символов). Если строка кончилась, то увеличиваем глобальный счетчик. В конце работы программы печатаем глобальный счетчик.

Ждем Ваших наработок.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.06.2014, 16:32   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

задача олимпиадная.
Рекурсивное решение для больших строк получается чрезвычайно неэффективное и затратное (как по требованиям к размеру стека, так и требования к времени вычислений). Если это нужно для сдачи решения в онлайн систему проверки, то решение с рекурсией НЕ ПРОКАТИТ!!!

Решать задачу нужно с помощью динамического программирования.
Как написано уважаемым LeBron тут - Delphi.Динамическое программирование
но, кода решения там нет!! Там только описание подхода к решению задачи!


ну и вдогонку.
Если кому-то интересно неэффективное решение через рекурсию (upd. по алгоритму описанному чуть выше), то вот оно:
Код:
var
  cnt : LongInt;
  LenS : byte;
  s : string;

procedure CountVariation(const Indx : byte);
begin
  if Indx>LenS then Inc(cnt)
  else begin
    if s[Indx] in ['0'..'9'] then begin  CountVariation( Indx+1 ); end;
    if Indx<LenS then begin
      if ((s[Indx] in ['1'..'2']) and (s[Indx+1] in ['0'..'9']))
           or (s[Indx] = '3') and (s[Indx+1] in ['0'..'3'])  then
           begin  CountVariation(Indx+2); end;
    end;
  end;
end;

begin
  s := '1025';
  cnt := 0;
  LenS := Length(s);
  CountVariation( 1 );
  WriteLn('Count of messages: ', cnt);
  Readln;  
end.

Последний раз редактировалось Serge_Bliznykov; 25.06.2014 в 16:47. Причина: исправил код рекурсии - убрал передачу строки в стек...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.06.2014, 16:53   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Serge_Bliznykov, спасибо, нужно будет в свободное время уделить больше внимания динамическому программированию.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование текста Dushka Visual C++ 2 13.10.2011 11:29
шифрование текста Lolipo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 28.10.2010 10:10
Шифрование текста Lepricon69 Общие вопросы Delphi 3 27.10.2010 11:52
шифрование текста Sparky Помощь студентам 2 01.06.2010 18:24
Шифрование текста SoundMan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 15.08.2008 22:39