Re: Перебор чисел
- From
- Dmitriy Gerasimenko ()
- To
- Andrew Ezhguroff
- Date
- 2002-07-23T14:51:09Z
- Area
- RU.ALGORITHMS
From: "Dmitriy Gerasimenko" <gerasimenko@karelia.ru>
AE> А какое отношение это имеет к исходной задаче? Требуется найти все
строки
AE> длинной N, содержащие (в любом кол-ве) символы заданного алфавита. Где
здесь
AE> перестановка и N! ?
AE> Требуемые M^N строк генерирует, например, такой код:
>
AE> #include <stdio.h>
AE> #include <stdlib.h>
AE> #include <string.h>
>
AE> int Tab_Out[256];
>
AE> int main(int argc, char **argv){
AE> if(argc<3)return 2;
AE> int Len_Out = atoi(argv[1]);
AE> int Cnt_Chr = strlen(argv[2]);
AE> while(1){
AE> for(int i=0; i<Len_Out; putchar(argv[2][Tab_Out[i++]]));
AE> putchar('\n');
AE> for(int i=0; (Tab_Out[i]=(Tab_Out[i]+1)%Cnt_Chr)==0;)
AE> if(++i>=Len_Out)return 0;
AE> }
AE> }
AE> С уважением, Андрей.
Этот код я скомпилировал в Borland for DOS и вот что он выдаёт:
//--------------------------------------------------------------------------
--
[perebor.exe 4 1234]
Число - 1234
Позиций - 4
Перестановки:
1111
2111
3111
4111
//--------------------------------------------------------------------------
--
[perebor.exe 3 1234]
Число - 1234
Позиций - 3
Перестановки:
111
211
311
411
//--------------------------------------------------------------------------
--
Количество перестановок мало! Т.е. алгоритму выдаёт неверный результат!
С уважением!
Dmitriy AKA AC//DC
//--------------------------------------------------------------------------
--
--- ifmail v.2.15dev5
* Origin: UNKNOWN (2:5020/400)