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

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

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2013, 16:35
Ответы с готовыми решениями:

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

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

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

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

4
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
11.11.2013, 17:41 2
Цитата Сообщение от 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  [ТС] 3
Цитата Сообщение от 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Эксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
12.11.2013, 16:07 4
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  [ТС] 5
Огромное спасибо
0
12.11.2013, 19:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2013, 19:02
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru