Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.036 c
4-1119772697
Storm
2005-06-26 11:58
2005.08.21
Перехват обращения к файлу или папке


4-1117111379
strong
2005-05-26 16:42
2005.08.21
дочернее окно как новая задача


14-1122300916
Piter
2005-07-25 18:15
2005.08.21
Ни один лист бумаги невозможно сложить пополам больше семи раз


3-1121072288
finn
2005-07-11 12:58
2005.08.21
Закрыть доступ к строке,а не к таблице (BDE)


6-1115721192
juice
2005-05-10 14:33
2005.08.21
TNMSMTP и кодировка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский