Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.11.2010, 18:38
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание Голова больше не варит - помогите...

Есть буквы ABC как получить всевозможные варианты записи этих 4 букв

ABC
ACB
BAC
BCA
CAB
CBA


Так как текст может быть и не ABC...
Код:
function faktorial(n: Integer): Integer;
begin;
if((n=0)OR(n=1))
 then Result:=1
 else Result:=n*faktorial(n-1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
variants, i:integer;
begin
i:=length(edit1.Text); //Длина текста
variants:=faktorial(i); //Получаем макс. значение цикла
for I := 1 to variants do
begin
{тут должен быть код который поменяет местами буквы
так что бы не было одинаковых}
end;
end;
__________________
Нет ничего не возможного. Вопрос только во времени...

Последний раз редактировалось Electronic_Arts, 22.11.2010 в 18:43.
Ответить с цитированием
  #2  
Старый 22.11.2010, 21:13
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

Ребята помогите - такое же возможно - но как это реализовать не могу придумать - дайте хоть какую нить зацепку...
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #3  
Старый 22.11.2010, 21:21
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Код:
const alf ='ABC';
var n1, n2,n3:integer;
  rs: string[3];
  list: TStringList;

list:=TstringList.Create;
for n1:=1 to length(alf)
begin
 rs[1]:=alf[n1];
 for n2:=1 to length(alf)
 begin 
  rs[2]:=alf[n2];
  for n3:=1 to length(alf)
  begin
    rs[3]:=alf[n3];
    list.add(rs);
  end;
end;
end;
list.savetofile(....);
Ответить с цитированием
  #4  
Старый 22.11.2010, 21:48
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

Чисто виртуозно написано но не подходит
Код:
const alf ='ABC'; // не получится
var n1, n2,n3:integer;
  rs: string[3]; // тоже не пойдет
  list: TStringList;

list:=TstringList.Create;
for n1:=1 to length(alf) {количество выполняемых циклов находим факториалом потому что 3 книжки можно разместить в полке 6ю разными способами}
begin
 rs[1]:=alf[n1];
 for n2:=1 to length(alf)
 begin 
  rs[2]:=alf[n2];
  for n3:=1 to length(alf)
  begin
    rs[3]:=alf[n3];
    list.add(rs);
  end;
end;
end;
list.savetofile(....);

Но все же спасибо что старался помочь
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #5  
Старый 22.11.2010, 21:54
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

Нет мистер MrDiG ты гений! Заметил что длина текста влияет на буквы - например - если текст состоит из 4 букв то каждая буква в ходе дела меняет свое место 4 раза - если еще размыслить то получиться!
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #6  
Старый 22.11.2010, 22:09
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

Нет мистер MrDiG ты не гений - ты тоже смертный - я поторопился с выводами - в твоем коде не то что куча ошибок но и не правильное присвоение...
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #7  
Старый 22.11.2010, 23:39
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Какая макс длина строки тебе нужна?
Ответить с цитированием
  #8  
Старый 23.11.2010, 00:05
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

111 - не катит, 1 повторяется
112 - не катит, 1 повторяется
113 -...
121 -...
122 -...
123 +
131 -
132 +
133 -
211 -
212 -
213 +
...
мб так?
Т.е перебрать все комбинации всех индексов и исключить то, где индексы повторяются? ^_^
...Тоже ступор, ниче более нормального чем рекурсивный перебор с исключением придумать не могу. А этот метод мягко говоря долгий будет...
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #9  
Старый 23.11.2010, 06:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Думаю это то, что тебе надо:
http://algolist.manual.ru/maths/comb...rmutations.php

А вообще, не работает своя голова - спроси у гугла. Та задача, которая тебе нужна, называется поиском перестановок.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:16.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025