Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: помогите написать алгоритм Добавлено: 19.02.09 19:00  

Автор вопроса:  planerolling
помогите написать алгоритм для этой штуковины )

Название задачи: Метод перебора
Создайте алгоритм, который образует все возможные строки длиной 5 из символов a, b, c, d и e? Строка вида “aabbb", как и другие строки с повторяющимися символами, считаются допустимыми. Сколько всего различных строк такого вида?

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Kardinal



ICQ: 360041513 

Вопросов: 1
Ответов: 164
 Web-сайт: kg7.ru
 Профиль | | #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-сайт: kg7.ru
 Профиль | | #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-сайт: xmaker.ru
 Профиль | | #4
Добавлено: 20.02.09 01:51
всего вариантов 3125

Ответить

Номер ответа: 5
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #5
Добавлено: 20.02.09 03:59
 fAndOrIn
твоя формула для перестановок, а не для перебора.

Ответить

Номер ответа: 6
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #6
Добавлено: 20.02.09 04:37
зы: рациональнее всего делать через аналог сложения в другой системе счисления. т.е. задаете максимальную границу, после которой единица переноса уходит в следующий разряд. в общем случае аллочится массив длиной строки. тут 5. ну и получаем функцию

  1. add_part(int part_index, int add_val, int max_val, int carry_flag)
  2.  
  3. соотв внутри кусок кода
  4.  
  5. parts[part_index] += add_val;
  6. if (parts[part_index] >= max_val){
  7.     parts[part_index] = 0;
  8.     inc_part(part_index + 1,0, max_val, 1);
  9. }
  10. parts[part_index] += carry;
  11. if (parts[part_index] >= max_val){
  12.     parts[part_index] = parts[part_index] - max_val;
  13.     inc_part(part_index + 1,0, max_val, 1);
  14. }



типа такого. допиливаем до удобства по необходимости. ну и метод типа 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-сайт: www.rascalspb.narod.ru
 Профиль | | #7
Добавлено: 20.02.09 04:39
# parts[part_index] += add_val;
# if (parts[part_index] >= max_val){
# parts[part_index] = 0;

сэлффикс. приравниеваем не нулю, а разности текущего значения и максимального(как во втором ифе с установкой флага переноса). данный вариант не проканает если попробуем прибавить раза в два больше, чем значение max_val. угадайте почему.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам