Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Помогите создать Алгоритм   Найти похожие ветки 

 
MS-REM   (2005-07-30 08:48) [0]

Помогите пожалуйста создать алгоритм!

Вообщем есть слово Arazel вот мне сказали сделать методом перебора
Бодобрать это слово но с учетам того что перебор будет ити самого начало
То есть например есть такое слово : 123

Вот пример:

Сначало надо крутить последнию

123
-------------------
000
001
002
003
010
011
012
013
020
021
022
023
030
031
032
033

пока не будет равна 123
-------------------

Только она дожна перебирать до 256 символов а длина 128.

Плиззззз помогите кто с алгоритмами работает???
Просто если я сделаю то она получится медленной да ещё много
Памяти хавать будет… То она не пройдет…


 
Джо ©   (2005-07-30 08:56) [1]

8-()


 
alpet ©   (2005-07-30 10:08) [2]

Какое отношение к WinAPI это имеет? Здесь к сожеланию нет раздела "Коммерция" где-бы этот пост с обозначенной суммой был бы к месту ))


 
MS-REM   (2005-07-30 13:04) [3]

Удалено модератором
Примечание: С разборками в персональную почту


 
Digitman ©   (2005-07-30 13:25) [4]

орех


 
Kolan ©   (2005-07-30 13:25) [5]


> слово сделать методом перебора

Бред какой то я ничего не понял. Что надо то...


 
palva ©   (2005-07-30 13:51) [6]

Типа, перебирать все слова длины 6 пока не встретится слово Arazel И чтоб программа быстро работала. Так я понял.


 
DrPass ©   (2005-07-30 14:02) [7]

Неа, с алгоритмами мы не работаем. Это сложно и не интересно. Нам бы закодить чего-то да напрограмить где-нить...


 
palva ©   (2005-07-30 14:09) [8]

У меня следующий код работает 3 секунды (2400 MHz)

{$APPTYPE CONSOLE}
const
 s: ShortString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var
 i1, i2, i3, i4, i5, i6: Integer;
 len: Integer;
 p: String[6];
label
 e;
begin
 len := Length(s);
 p := "123456";
 for i1 := 1 to len do begin
   p[1] := s[i1];
   for i2 := 1 to len do begin
     p[2] := s[i2];
     for i3 := 1 to len do begin
       p[3] := s[i3];
       for i4 := 1 to len do begin
         p[4] := s[i4];
         for i5 := 1 to len do begin
           p[5] := s[i5];
           for i6 := 1 to len do begin
             p[6] := s[i6];
             if p = "Arazel" then begin
               WriteLn("OK");
               goto e
             end
           end
         end
       end
     end
   end
 end;
 WriteLn("Not found");
 e:
end.


 
Anatoly Podgoretsky ©   (2005-07-30 14:37) [9]

Изветсный Arazel в очередной раз поменял ник и ничего не изменилось.


 
Ms-Rem (real)   (2005-07-30 18:53) [10]

Удалено модератором
Примечание: Скорее тебя за ненужные советы модераторам.


 
Eraser ©   (2005-07-30 19:11) [11]

LOL


 
Palladin ©   (2005-07-30 21:00) [12]

бедняга... брут форс хочет сделать...


 
Kerk ©   (2005-07-30 21:01) [13]

Ламо вернулось? :)


 
TStas ©   (2005-07-30 21:05) [14]

А мне раз пришлось столкнуться с ситуацией, глде n циклов вложенных должно было быть, придумал, как без них обойтись, если я верно сабж понял.
Идея простая:
Берем массив длинной n. Если n - это переменная, то и массив динамический. Заплоняем его нулями для начала. Пускай массив x зовут.
В переведенном коде максимальное значение len зовут, ну назову maxN так еще более общий случай получится.
Внутри цикла while true
inc(x[0])
пишу цикл, который пробегает всесь массив x. Если x[i]>maxN тогда inc(x[i+1]); x[i]:=x[i+1] else break. Получается как колесики на спидометре, которые километраж мериют. Я как найду код, напишу подробнее, если сабж верно понял, в чем сам сомневаюсь.
Но идея такая, что если очередной элемент вылез из диапазона, то есго назад возвращать, а следующий увеличивать. Тогда не будет n циклов. А массив заменит переменные i1...in


 
TStas ©   (2005-07-30 21:14) [15]

for I:=1 to N do curVars[i]:=1; //Установка начальных значений
 while curVars[n]<=M do //Внешний цикл
   begin

   for i:=1 to N-1 do  //Этот цикл перебрасывает "колесики"-переменные
     begin
     if curVars[i]>M then //Если переменная больше максимума
       begin
       inc(curVars[i+1]); //и увеличиваю следующий счетчик
       curVars[i]:=curVars[i+1]; //Значит прокрутился счетчик этого "колесика"
       end
     else break; //Иначе останавливаю
     end;

   for i:=N-1 downto 1 do //А этот находит вылезания за М и убирает его
     begin
     if curVars[i]>M then curVars[i]:=curVars[i+1]; //Если есть превышение, то делаю, как стоящий справа
     end;

   if curVars[n]>M then break;  //Если самый правый вылез из диапазона - выход
Вот, нашел код.
curVars - тот самый массив, элементы которого заменяю счетчики цикло.
Далеше код не привожу, там уже идет использование переменных.
Здесь пример в точности описывает ситуацию с вложенными циклами, где следующий бегает от предыдущего.
Код из праверенной программы


 
TUser ©   (2005-07-30 21:42) [16]

> TStas

Это делают не так

type
TMine = string[3];

function Next (var A: TMine): boolean;
var i: integer;
begin
 result:=true; i:=length(A);
 while result and (i > 0) do begin
   if ord (A[i]) < 255 then begin
     A[i] = succ(A[i])
     result:=false
     end else A[i] = #0;
   dec (i);
   end;
 result:=not result;
end;

procedure Enum;
var A: TMine;
begin
 A := #0#0#0;
 repeat
   {do somethig with A}
 until !Next(A)
end;


 
TUser ©   (2005-07-30 21:44) [17]

Лучше вынести сам алгоритм в отдельную функцию и не забивать им ту честь кода, которая что-то делает с каждым конкретным значением.


 
TStas ©   (2005-07-31 01:36) [18]

>TUser значит я не верно понял вопрос. Я решил что трудность в том, что вложенные циклы неопределенного кол-ва.


 
SergP ©   (2005-07-31 10:34) [19]


> [16] TUser ©   (30.07.05 21:42)


> [15] TStas ©   (30.07.05 21:14)


А почему ві считаете что рекурсия - это плохо?


 
TStas ©   (2005-07-31 20:02) [20]

>SergP
Мне просто показалось, что здесь она ни к чему. А потом ее ведь неприятно отлаживать и стек она переполнить может. Я к ней прибегаю в самых крайних случаях.
Старанно, куда делся автор сабжа? Я просто прочитал
>Только она дожна перебирать до 256 символов а длина 128.
И последовательнось переборов приведена, ну просто из той задачи, из которой я код привел



Страницы: 1 вся ветка

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.045 c
14-1122654596
Holy
2005-07-29 20:29
2005.08.21
Первая пришедшая в голову мысль сегодня вечером...


1-1122497703
SpyBoy
2005-07-28 00:55
2005.08.21
Качественный текст


8-1113571785
anat
2005-04-15 17:29
2005.08.21
Опять OpenGL


1-1123037753
iskatel
2005-08-03 06:55
2005.08.21
proxy


4-1120045400
SPeller
2005-06-29 15:43
2005.08.21
Заставить IE перечитать настройки