Страница: 1 |
Страница: 1 |
Вопрос: помогите написать алгоритм
Добавлено: 19.02.09 19:00
Автор вопроса: planerolling
помогите написать алгоритм для этой штуковины )
Название задачи: Метод перебора
Создайте алгоритм, который образует все возможные строки длиной 5 из символов a, b, c, d и e? Строка вида “aabbb", как и другие строки с повторяющимися символами, считаются допустимыми. Сколько всего различных строк такого вида?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Kardinal
ICQ: 360041513
Вопросов: 1
Ответов: 164
Web-сайт:
Профиль | | #1
Добавлено: 19.02.09 19:29
Не рациональоно
dim variants(1000) as string,A(10) as integer,B as integer,I as integer
for A(1)= 1 to 5
for A(2) = 1 to 5
for A(3) = 1 to 5
for A(4) = 1 to 5
for A(5) = 1 to 5
B=B+1
variants(B) = ""
for I = 1 to 5
variants(B) = variants(B) + chr$(asc("a"-1+A(1))
next I
next A(5)
next A(4)
next A(3)
next A(2)
next A(1)
переменная B почти не нужна
Это не оптимальный вариант, сейчас попробую нормальный...
Номер ответа: 2
Автор ответа:
Kardinal
ICQ: 360041513
Вопросов: 1
Ответов: 164
Web-сайт:
Профиль | | #2
Добавлено: 19.02.09 19:34
Ну а если тебе нужно просто посчитать их количество (не выводить) тогда
N = Nbukv ^ LenSlovo
Номер ответа: 3
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #3
Добавлено: 20.02.09 00:36
Сколько всего различных строк такого вида? 5!=120 - это ответ?
Номер ответа: 4
Автор ответа:
Demrak
ICQ: 213668448
Вопросов: 6
Ответов: 22
Web-сайт:
Профиль | | #4
Добавлено: 20.02.09 01:51
всего вариантов 3125
Номер ответа: 5
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #5
Добавлено: 20.02.09 03:59
fAndOrIn
твоя формула для перестановок, а не для перебора.
Номер ответа: 6
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #6
Добавлено: 20.02.09 04:37
зы: рациональнее всего делать через аналог сложения в другой системе счисления. т.е. задаете максимальную границу, после которой единица переноса уходит в следующий разряд. в общем случае аллочится массив длиной строки. тут 5. ну и получаем функцию
типа такого. допиливаем до удобства по необходимости. ну и метод типа parts_to_str.
для этого проще всего завести массив char symbols [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e'};
ну и дальше part_symbol = symbols[parts[part_index]];
на всидку все. с данным алфавитом получим сложение 16-ричных чисел. работает с числами любой длины. допиливаем проверки лимитов. выпиливаем алфавит и делаем его вводимым с клавы и получаем теоретически 26 + 26 + 10 -> 52-у ричную систему счисления. итого получаем на ровном месте сжатие инормации при кодировании чисел, т.к. для кодировния числа "51" нам понадобится 1 символ.
Номер ответа: 7
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #7
Добавлено: 20.02.09 04:39
# parts[part_index] += add_val;
# if (parts[part_index] >= max_val){
# parts[part_index] = 0;
сэлффикс. приравниеваем не нулю, а разности текущего значения и максимального(как во втором ифе с установкой флага переноса). данный вариант не проканает если попробуем прибавить раза в два больше, чем значение max_val. угадайте почему.