Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Eugene Anuchin                       2:5070/96.2    21 Jul 2002  01:30:04
 To : Dmitriy Gerasimenko
 Subject : Перебор чисел
 -------------------------------------------------------------------------------- 
 
 
  19 Июл 02 14:19, Dmitriy Gerasimenko wrote to All:
 
  DG> И спросил у меня радиотехник: "....нужно код разгадать у
  DG> магнитолки.... цифери я узнал, нужно сделать перебор." Спрошено -
  DG> сделано, причём с удовольствием. Код 4-ёх значный = 2514. N=
  DG> 4 Вложенные циклы отпадают, т.к. чем больше N тем больше
  DG> гемор....
 
  DG> Привожу код на С (Borlabd C++ 3.1 for DOS), который возможно и лучше
  DG> можно было сделать, а ? или нельзя ?
 
 Я использовал рекурсию, программа находит все перестановки произвольной строки
 символов. Предполагается что все символы различны. Компилировалось fasm'ом.
 http://fasm.metro-nt.pl/fasm.zip (~200kb). Imho, получился довольно изящный и
 короткий (53 байта) алгориитм... Для строки '0123456789' выдает честных 3628800 
 перестановок менее чем за секунду (ессно без вывода на консоль). фича: после
 последней перестановки строка принимает первоначальный вид, как до перестановок.
 
         org 100h
         xor ch,ch   ;обнуляем старший байт счетчика
         mov bl,cnt  ;кол-во символов
         mov dx,buf  ;начало строки
         mov ah,9    ;печать в stdout
         int 21h
 ;----------------------
 recur:  mov bh,bl   ;выполняем bh <- bl раз основной цикл
         dec bl      ;выполняем (bl-1) раз подпрограмму
 next:   cmp bl,1    ;проверка концевика
         jna konec   ;если <=1, то перестаем вызывать подпрограмму
         push bx     ;иначе сохраняем оба счетчика
         call recur  ;вызываем подпрограмму
         pop bx      ;восстанавливаем оба счетчика
 konec:  mov cl,bl   ;кол-во символов для сдвига
         mov di,dx   ;адрес приемника
         mov si,dx   ;адрес источника (след.символ)
         inc si
         mov al,[di] ;сохраняем младший символ, который щаз затрется
 rep     movsb       ;сдвигаем 'сх' символов в младшие адреса
         stosb       ;сохраненный младший символ пишем в старший адрес
         dec bh      ;уменьшаем счетчик кол-ва проходов
         jnz print
         ret         ;если ноль, то выход из подпрограммы
 print:  int 21h
         jmp next    ;следующий проход
 ;-----------------------------
 buf     db  'abcd'  ;массив. вместо 'abcd' подставь '2514'
 cnt = $-buf         ;количество элементов
         db 13,10,'$'
 ... Life - Sucks!
 --- Hе подохнешь - пpивыкнешь, не пpивыкнешь - подохнешь! (М. Жванецкий)
  * Origin: `Wireless' Евгений ael @irk. ru (2:5070/96.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Перебор чисел   Dmitriy Gerasimenko   19 Jul 2002 14:19:40 
 Re: Перебор чисел   Andrey Belyakov   19 Jul 2002 18:52:10 
 Re: Перебор чисел   Dmitriy Gerasimenko   22 Jul 2002 09:08:25 
 Перебор чисел   Georgy Plechanov   22 Jul 2002 11:30:56 
 Re: Пеpебоp чисел   Mike Girkin   19 Jul 2002 19:44:34 
 Перебор чисел   Eugene Anuchin   21 Jul 2002 01:30:04 
 Re: Перебор чисел   Dmitriy Gerasimenko   22 Jul 2002 09:08:26 
 Перебор чисел   Eugene Anuchin   23 Jul 2002 03:03:31 
 Re: Перебор чисел   Dmitriy Gerasimenko   23 Jul 2002 11:22:25 
 Пеpебоp чисел   Alexander Hritonenkov   23 Jul 2002 13:12:42 
 Re: Пеpебоp чисел   Dmitriy Gerasimenko   23 Jul 2002 14:51:09 
 Пеpебоp чисел   Alexander Hritonenkov   23 Jul 2002 18:09:20 
 Re: Пеpебоp чисел   Dmitriy Gerasimenko   23 Jul 2002 14:51:12 
 Re: Перебор чисел   Andrew Ezhguroff   23 Jul 2002 14:24:31 
 Re: Перебор чисел   Dmitriy Gerasimenko   23 Jul 2002 14:51:09 
 Re: Перебор чисел   Andrew Ezhguroff   24 Jul 2002 01:43:03 
 Re: Перебор чисел   Dmitriy Gerasimenko   26 Jul 2002 08:43:38 
 Re: Пеpебоp чисел   Mike Girkin   23 Jul 2002 15:26:22 
 Перебор чисел   Eugene Anuchin   24 Jul 2002 00:12:05 
 Re: Перебор чисел   Dmitriy Gerasimenko   24 Jul 2002 10:07:18 
 Перебор чисел   Eugene Anuchin   25 Jul 2002 00:50:07 
 Re: Перебор чисел   Dmitriy Gerasimenko   25 Jul 2002 09:00:59 
 [*] Перебор чисел   Comoderator Of Ru Algorithms   25 Jul 2002 16:30:12 
 Re: Пеpебоp чисел   Anatoly Svishev   22 Jul 2002 23:31:02 
 Re: Пеpебоp чисел   Dmitriy Gerasimenko   23 Jul 2002 11:22:25 
Архивное /ru.algorithms/27953d399846.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional