Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.82.140.17] |
|
Сообщ.
#1
,
|
|
|
Не подскажите ли алгоритм для решения следующей задачи:
Пусть дан алфавит из n букв (символов) A = {a1,a2,...,an}. Нужно найти множество всех слов длины k, состоящих из букв алфавита A (число этих слов - n в степени k). Заранее спасибо! |
Сообщ.
#2
,
|
|
|
ну, очень просто.
запускаешь К вложенных циклов, каждый из которых пробегает все значения от a1 До an и каждый jый (j = 1,..k) цикл отвечает за jую букву в слове. так все и переберешь. на самом деле, вместо написания циклов я пишу рекурсивную функцию, что в принципе тоже самое, но немного более гибкче. вот, например, все слова из 2х букв <br>char Alphabet[] = {'a', 'b', ... , 'z'};<br>const int N = 26;<br>for (int i1 = 0; i1 < N; i1++)<br> for (int i2 = 0; i2 < N; i2++)<br> cout<<"Word "<<Alphabet[i1]<<Alphabet[i2]<<endl;<br> ну, вообщем идея должна быть видна. c помощью рекурсии примерно так <br>char Alphabet[] = {'a', 'b', ... , 'z'};<br>char Word[2];<br><br>int main(){<br>rec_fun(2,0); // вызов функ-ии<br>return 0;<br>}<br><br>void rec_fun(const int WordLen, int depth)<br>{<br>if(depth == WordLen)<br>{<br>cout<<Word<<endl;<br>return;<br>}<br><br>for(int i = 0;i < 26 ; i++)<br>{<br>Word[depth] = Alphabet[i];<br>rec_fun(WordLen,depth+1);<br>}<br>}<br> идея тоже должна быть видна. |
Сообщ.
#3
,
|
|
|
Действительно просто :)
|
Сообщ.
#4
,
|
|
|
Цитата Katz, 09.07.03, 20:23:28 Действительно просто ну, и что надо сказать? |
Сообщ.
#5
,
|
|
|
Ну спасибо, спасибо :)
|
Сообщ.
#6
,
|
|
|
Цитата Katz, 10.07.03, 17:07:05 Ну спасибо, спасибо пожалуйста! ;D |