|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Dmitriy Gerasimenko 2:5020/400 23 Jul 2002 11:22:25 To : Eugene Anuchin Subject : Re: Перебор чисел -------------------------------------------------------------------------------- Hi, Eugene! > DG> У меня подозрения, что твой алгоритм не разрешает размножаться > DG> символам в исходной строке, то есть он другой. Мой алгоритм похож на > DG> электросчётчик, или на спидометр в автомобиле если угодно. > DG> Соответсвенно, по моёй формуле количество перестановок твоего числа "0123456789" = > DG> 10^10 > EA > А какой тогда здесь вообще алгоритм?! > EA > Просто пробегаем все значения от 0 до 10^10-1 (0000000000-9999999999) А кто вообще говорил что это должны быть обязательно числа ???........ Hикто вроде не говорил! Всё немного сложнее и интереснее чем кажется. Для твоего числа - "0123456789" можно конечно цикл организовать . Это верно. А для чисел: "45689", "987540", "98763210" т.е. у тех у которых числа не попорядку, как прикажешь цикл организовывать ???!! А для символов: "KADY", "WOUCJKB", "QWERTY" организовать цикл т.е. "пробежать" тоже не получится! Hу а коли так! То цикл тут не поможет, и применять следует ПЕРЕСТАHОВКУ! > EA > А какой тогда здесь вообще алгоритм?! Hу а если применить следует ПЕРЕСТАHОВКУ, то это ни что иное как алгоритм перестановки. EA> Для строки '0123456789' выдает честных 3628800 EA> перестановок менее чем за секунду (ессно без вывода на консоль) > EA> Как это нет?!!! Печать идет на стандартное устройство вывода (по умолчанию - > EA> консоль). Можно перенаправить в файл (перестановки.com > отчет.txt) Тебя не понять, сначала ты пишешь что вывода на консоль нет, потом ,что есть!? Определись! Далее... хорошо, вот то, что ты имеешь в виду, но не имею в виду я: это БЕЗ рекурсии, но есть и С рекурсией.... //-------------------------------------------------------------------------- --------------------------------------------------- #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <string.h> void reconstruct(char *s) { long i,t; char *as, *bs, *cs; char *dup_str; as = bs = s; i = 0; dup_str = strdup(s); do { while (*++bs) { t = *as; *as = *bs; as++; *as = t; fprintf(stdout, "%d\t: %s\n", ++i, s); } as = bs = s; } while (strcmp(dup_str, s) != 0); free(dup_str); } int main(int c, char **argv) { if (c <= 1) { fprintf(stderr, "Bad argument. [%s [string]]\n", argv[0]); return 0; } clrscr(); reconstruct( argv[1] ); return 0; } //-------------------------------------------------------------------------- --------------------------------------------------- Результат вывода для числа: [1234] 1 : 2134 2 : 2314 3 : 2341 4 : 3241 5 : 3421 6 : 3412 7 : 4312 8 : 4132 9 : 4123 10 : 1423 11 : 1243 12 : 1234 //-------------------------------------------------------------------------- --------------------------------------------------- Hа сим заканчиваю... ..... алгоритмы разные нужны, алгоритмы разные важны............. --- ifmail v.2.15dev5 * Origin: UNKNOWN (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/8968f10f0885.html, оценка из 5, голосов 10
|