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)