На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Алгоритм перебора
    Кто расскажет как, зная длинну строки, перебрать все возможные её комбинации (возможные символы: alpha, digit, специальные. Всё в нижнем регистре)?
      Теория:

      Как известно спецсимволами являются символы с кодами 33-47,58-64,91-96 и 123-126.  Символы латинского и русского алфавита в нижнем регистре с 97 и 224 по 122 и 255 соотв.

      Практика:
      (код приводить не буду, делай сам)
      Создаем массив целых, массив символьных и одну строковую переменную. Номером последнего элемента является длинна строки. Далее, в массиве целых начинаем перебор т.е. последний элемент массива последовательно изменяем от 33 до 255 (см. теорию), когда все извращения с последним элементом закончены изменяем предпоследний элемент и так далее до бесконечности (:)) т.е. до первого символа. Паралельно с этим делаем тоже самое с символьным массивом, но с одной разницей - элементам массива присваевается значение целого массива и строковой переменной присваеваем полученный результат (символьный массив) затем выводим результат на форму (или куда там надо?). Строковую переменную обнуляем и все заново! Обычно все это "вешается" на событие по таймеру.

      з.ы.
      Схема проверенна и работоспособна!
           


        Поищи ветку brut force (здесь или в Delphi)
          Сорри, z1288, но я НИХРЕНА не понял! Давай упростим задачу, ведь модель останется та же. Например напишем примитивну программу перебора числовых комбинаций (кончено с числами можно их просто увеличивать с начального до конченого на 1, и будут все комбинации, но мы усложним специально):

          int main(int argc, char* argv[])
          {
           char szsortout[5]; int i, j;

           for(i = 0; i <= 5; i++) {
             for(j = 0; j <= 9; j++) {
               itoa(j, &szsortout[i], 10);
               puts(&szsortout[0]);
             }
           }

           return 0;
          };
          Ну и в чём тут проблема? В том что все комбы не перебираются, т.к по чути получатся должно так - когда присваивается первый возможный символ первого символа строки, то нужно уже делать тоже самое и со второй и т.п, понимаешь? Так же и с числами. Может я сегодня туго соображаю, но что-то совчем из того что ты сказал не понял...
            Ну конечно, это даже видно по тому, что у тебя 50 "комбинаций", а должно быть 10^5 ;). Для пяти можно сделать 5-рное вложение петлей, но я думаю, тебе это не решение ;). Рекуренцией тебе можно пользоваться? Если так, создай рекурсивную функцию. Это будет решение :)
            Сообщение отредактировано: TrivialCore -
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0225 ]   [ 14 queries used ]   [ Generated: 23.05.24, 15:29 GMT ]