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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2012, 20:50   #21
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Именно так (заменить на требуемую строку).
Код:
var s:string;
...
begin
  readln(s);
  Permute('',s);
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.04.2012, 21:19   #22
Helen236
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Именно так (заменить на требуемую строку).
Код:
var s:string;
...
begin
  readln(s);
  Permute('',s);
end.
Спасибо. А как поставить ограничения??? Строка от 2 до 8
Helen236 вне форума Ответить с цитированием
Старый 10.04.2012, 21:30   #23
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
var s:string[8];
...
begin
  readln(s);
  Permute('',s);
end.
Это не ограничение (если 2<=M<=8 было написано в условии), а всего лишь говорит, какие данные будут даны (т.е. что мы можем рассчитывать, что максимальная строка 8 символов).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.04.2012, 21:55   #24
Helen236
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
var s:string[8];
...
begin
  readln(s);
  Permute('',s);
end.
Это не ограничение (если 2<=M<=8 было написано в условии), а всего лишь говорит, какие данные будут даны (т.е. что мы можем рассчитывать, что максимальная строка 8 символов).
Это понятно, но при ртправке на сервер выдает превышение времени. Решет за 3 секунды, а должна за 1. Может подскажете?
Helen236 вне форума Ответить с цитированием
Старый 10.04.2012, 22:06   #25
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

С этой проблемой не помогу. Не знаю, как можно ускорить функцию.
Можно попробовать:
Код:
uses
  CRT;

var
  s: string[8];

procedure Permute(t, s: string[8]; len: byte);
var
  i: byte;
begin
  if len = 0 then
    writeln(t)
  else
    for i := len downto 1 do
      if Pos(s[i], s) = i then
        Permute(t + s[i], Copy(s, 1, i - 1) + Copy(s, i + 1, len - i), len - 1)
end;

begin
  readln(s);
  Permute('', s, length(s));
end.
Но вряд ли это сильно ускорит код (попытка, не пытка).
Подождем автора оригинальной процедуры.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.04.2012 в 22:10.
BDA вне форума Ответить с цитированием
Старый 10.04.2012, 22:13   #26
Helen236
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Согласен, запутано..
Думаю, можно проще. Держи.
Извиняюсь перед вышевыступавшими - не стал влезать в их код, накарябал свой.. Вроде пашет. Особенно не проверял, погоняй..
Код:
procedure Permute(t,s: string);
var
  i: integer;
begin
  if s='' then
    writeln(t)
  else
    for i:=1 to Length(s) do
      if Pos(s[i],s)=i then
        Permute(t+s[i],Copy(s,1,i-1)+Copy(s,i+1,Length(s)-i))
end;

begin
  Permute('','212')
end.
Объяснить что-то, или и так все ясно? ))
Успехов тебе, Леночка236 ))
Это понятно. Огромное спасибо, но при отправке на сервер выдает превышение времени, т.е. задача должна решаться за 1 секунду, а она решается за 3. Може сможете (сможеш) чем помочь?
Helen236 вне форума Ответить с цитированием
Старый 11.04.2012, 10:13   #27
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Это понятно. Огромное спасибо, но при отправке на сервер выдает превышение времени, т.е. задача должна решаться за 1 секунду, а она решается за 3. Може сможете (сможеш) чем помочь?
а если такой вариант попробовать?
Код:
type str8 = string[8];

procedure Permute(const t,s: str8);
var
  i,j: integer;
  lenS : byte;
  ch : char;
begin
  lenS := length(s);
  if lenS=0 then
    write(t)
  else
    for i:=1 to lenS do begin
      ch := s[i];
      j:=1;
      while s[j]<>ch do inc(j);
      if j=i then
        Permute(t+ch, Copy(s,1,i-1)+Copy(s,i+1,Length(s)-i))
    end;
end;

begin
  Permute('','12345678');
end.
он за сколько выполняется?

Последний раз редактировалось Serge_Bliznykov; 11.04.2012 в 10:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.04.2012, 16:53   #28
Helen236
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 23
Вопрос

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если такой вариант попробовать?
Код:
type str8 = string[8];

procedure Permute(const t,s: str8);
var
  i,j: integer;
  lenS : byte;
  ch : char;
begin
  lenS := length(s);
  if lenS=0 then
    write(t)
  else
    for i:=1 to lenS do begin
      ch := s[i];
      j:=1;
      while s[j]<>ch do inc(j);
      if j=i then
        Permute(t+ch, Copy(s,1,i-1)+Copy(s,i+1,Length(s)-i))
    end;
end;

begin
  Permute('','12345678');
end.
он за сколько выполняется?
Этот вариант дает решение 123456781234567812345678 и т.д. ???????
Helen236 вне форума Ответить с цитированием
Старый 11.04.2012, 17:43   #29
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
uses crt;
type str8 = string[8];
 
var
s:str8;
 
procedure Permute(const t,s: str8);
var
  i,j: integer;
  lenS : byte;
  ch : char;
begin
  lenS := length(s);
  if lenS=0 then
    writeln(t)
  else
    for i:=1 to lenS do begin
      ch := s[i];
      j:=1;
      while s[j]<>ch do inc(j);
      if j=i then
        Permute(t+ch, Copy(s,1,i-1)+Copy(s,i+1,Length(s)-i))
    end;
end;
 
begin
  readln(s);
  Permute('',s);
end.
(программа Serge_Bliznykov, отправляйте в таком виде)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.04.2012, 20:32   #30
Helen236
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
uses crt;
type str8 = string[8];
 
var
s:str8;
 
procedure Permute(const t,s: str8);
var
  i,j: integer;
  lenS : byte;
  ch : char;
begin
  lenS := length(s);
  if lenS=0 then
    writeln(t)
  else
    for i:=1 to lenS do begin
      ch := s[i];
      j:=1;
      while s[j]<>ch do inc(j);
      if j=i then
        Permute(t+ch, Copy(s,1,i-1)+Copy(s,i+1,Length(s)-i))
    end;
end;
 
begin
  readln(s);
  Permute('',s);
end.
(программа Serge_Bliznykov, отправляйте в таком виде)
Выдает ошибку компиляции
Helen236 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестановки SVing Паскаль, Turbo Pascal, PascalABC.NET 26 27.02.2012 22:01
C# Перестановки pro100saniok Помощь студентам 5 21.12.2010 00:12
перестановки символов mrkheggy Помощь студентам 7 12.12.2010 23:39
перестановки fedd Помощь студентам 2 27.11.2009 22:59
Перестановки H'orn Общие вопросы .NET 4 11.11.2009 03:08