Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 17

комбинация любой длинны символов из заданного массива

11.11.2013, 16:35. Показов 2122. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Задача состоит в следующем, имеется известный заданный массив символов. Пример:

char massiv [] = {a,b,c,d};

Массив может быть любым с любыми символами.
Требуется написать функцию, имеющую параметр - длину требуемой последовательности комбинации символов ("пароля") из массива. Эта длинна может быть как меньше, так и больше количества символов в массиве. Каждый символ обязательно встречается в "пароле" минимум 1 раз. В функции используется функция, возвращающая заданный массив и функция, проверяющая "пароль" на соответствие заданному. Необходимо использовать рекурсию.

Пример:

Java
1
2
3
4
5
6
7
8
9
10
11
public void breakPassword(int sizeOfPassword) { //параметр - длинна требуемой комбинации символов
        
      char massiv [] = {};
      massiv = getCharacters(); /** (тип char) передает переменной massiv  заданную последовательность символов*/
      
      
      
      tryOpen(char[] password)  /**(тип boolean) проверяет "пароль" на соответствие
                                           заданному, возвращая true (соответствие)
                                           или false, при значении true цикл заканчивается*/
    }
Функции boolean tryOpen(char[] password) и char[] getCharacters() уже имеются. Подскажите пару советов или пример кода. Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2013, 16:35
Ответы с готовыми решениями:

Комбинация символов из заданного массива
Есть массив $arr = array('a', 'b', 'c'); Нужно перебрать его элементы что бы получилось abc bac bca bac abc acb

Дана строка символов, пользователь вводит комбинацию символов проверить сколько раз встечается эта комбинация в строке.
Дана строка символов, пользователь вводит комбинацию символов проверить сколько раз встечается эта комбинация в строке. Например: Мама,...

Что означает комбинация символов #'?
Например (defun sortirovka (x) (sort x #'>)) В Интернете не нашел

4
 Аватар для lowercase
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
11.11.2013, 17:41
Цитата Сообщение от yurgeno Посмотреть сообщение
Эта длинна может быть как меньше, так и больше количества символов в массиве
Цитата Сообщение от yurgeno Посмотреть сообщение
Каждый символ обязательно встречается в "пароле" минимум 1 раз
вам не кажеться, что одно другому противоречит, малость?

Добавлено через 6 минут
один из вариантов(для случаяя когда размер пароля равен или больше колличеству доступных символов):
1) создать копию масива(если иходный масив не должен изменяться;
2) перемешать элементы массва(например методом Collections.shuffle())
3) тупо и алчно попорядку выбирать из перемешанного масива символы, добавля их к результирующему паролю.
4) если мы уже выбрали все символы из доступного набора, то дабы не было повторений перемешиваем его снова
и так пока не будет достигнут пароль нужной длинны.

Добавлено через 8 минут

Не по теме:

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

Java
1
2
char massiv [];
massiv = getCharacters();



Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от yurgeno Посмотреть сообщение
Необходимо использовать рекурсию.
ох уж эти преподы... дабы показать как работает рекурсия заставляют делать задачи, которые весьма туманно демонстрируют ее возможности.

0
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 17
11.11.2013, 23:12  [ТС]
Цитата Сообщение от lowercase Посмотреть сообщение
вам не кажеться, что одно другому противоречит, малость?
Да, спасибо, не обратил внимания, когда писал, Вы совершенно правы, длинна "пароля" может быть только больше длинны массива. Попробую что-нибудь сотворить, прибавляя все возможные комбинации из символов к первому символу в массиве, потом ко второму и так далее... Потом прибавлять всю эту комбинацию к комбинациям первых двух символов массива до тех пор, пока не достигну требуемой длинны пароля. Однако уже теряюсь, когда пытаюсь прибавить комбинации к комбинации двух символов.

Цитата Сообщение от lowercase Посмотреть сообщение
ох уж эти преподы... дабы показать как работает рекурсия заставляют делать задачи, которые весьма туманно демонстрируют ее возможности
Да, для меня, изучающего java менее месяца, к сожалению, это совершенно адская задача.

Добавлено через 3 часа 23 минуты
Код получился такой:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class BruteForceAttacker extends Thief {
    
    public  String generatePass(char[] chars, int lenght) {
        Random rand = new Random();
        
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < lenght; i++) {
            sb.append(chars[rand.nextInt(chars.length)]);
        }
        
        return sb.toString();
    }
    @Override
    
    public void breakPassword(int sizeOfPassword) {  //параметр, длинна "пароля"
       char[] chars = getCharacters(); // получение массива символов
       char[] password;
       boolean rezult = false;
       BruteForceAttacker cn = new BruteForceAttacker();
        
        while (rezult != true){
            
        String pass = cn.generatePass(chars, sizeOfPassword);
        password = pass.toCharArray ();//перевод String в char (функция проверки пароля работает с типом char)
        rezult = tryOpen(password); //проверка "пароля"
         }
    }
    
 
}
К сожалению, в тесте нельзя использовать nextInt и по времени программа не укладывается в отведенные ограничения. Не знаю, почему, то ли пароль долго генерирует, то ли медленно подбирает. Вроде бы при использовании рекурсии должно быть быстрее. Подскажите, как в данном коде сделать генерацию пароля рекурсией без использования nextInt.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
12.11.2013, 16:07
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package easybudda.randompassword;
 
import java.util.*;
 
public class RandomPassword {
    //private static List<Character> symbols = new ArrayList<>(Arrays.asList('a', 'b', 'c', 'd', 'e', 'f'));
    private static String symbols = "abcdef";
    private static Random rand = new Random();
    
    static String randomShuffle(StringBuilder sb) {
        char [] s = sb.toString().toCharArray();
        for ( int i = 0; i < s.length - 1; ++i ) {
            for ( int j = s.length - 1; j > i; --j ) {
                if ( rand.nextBoolean() ) {
                    char tmp = s[i];
                    s[i] = s[j];
                    s[j] = tmp;
                }
            }
        }
        return new String(s);
    }
    
    static String password(int length, StringBuilder buf) {
        if ( length > symbols.length() ) {
            buf.append(symbols);
            return password(length - symbols.length(), buf);
        }
        else {
            buf.append(symbols.substring(0, length));
            return randomShuffle(buf);
        }
    }
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        while ( true ) {
            System.out.print("Length: ");
            if ( ! scan.hasNextInt() )
                break;
            
            int len = scan.nextInt();
            System.out.println("Password: " + password(len, new StringBuilder()));
        }
    }
}
0
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 17
12.11.2013, 19:02  [ТС]
Огромное спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2013, 19:02
Помогаю со студенческими работами здесь

Определить является ли комбинация символов комбинацией SOS
Определить является ли входной массив символов комбинацией SOS ( · · · - - - · · ·) (три точки три тире три точки).

Переместить элементы заданного массива на К символов влево
Приветствую вас! С наступившим! Уже который раз прошу форумчан помочь (когда-нибудь я наконец разберусь в С++... когда-нибудь, но не...

Создать словарь - комбинация букв и цифр; длина последовательности - 8 символов
Всем привет. Кто поможет создать программу которая может составить словарь набором таких символов: aaaaaaa, aaaaaaab...aaaacbk6 и так...

Определить, сколько раз в строке встречается заданная комбинация символов
определить сколько раз в строке встречается Комбинация символов С ++

Подсчет числа символов указанного типа в любой строке символов на SHELL
Здравствуйте)) :) Помогите, пожалуйста , разработать программу подсчета числа символов указанного типа в любой строке символов. Строка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru