|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Yuri Kolesnikov 2:5033/35.77 14 Sep 2001 08:14:40 To : Vladimir Kotov Subject : Re: simple task -------------------------------------------------------------------------------- 13 Сен 01 22:34, Vladimir Kotov -> All: VK> Hикто не знает как осуществить перебор всех аскишных строчек с VK> определенной побайтовой суммой? Строчки мб разной длины. Первое, что приходит в голову - рекурсия. Если заданная сумма Sum, то выбираем в цикле все варианты первого символа (пусть его код С1) и присоединяем к нему все возможные варианты строк с суммой (Sum-C1). Hа Пасквиле это будет выглядеть так: {$M 64000,0,0} Procedure Ascii_str(Sum:integer; S:string); var C1:byte; Limit:integer; begin if Sum=0 then {В S находится очередной вариант строки} {можно обрабатывать} Writeln(S); exit; end; if Sum > 255 then Limit:=255 else Limit:=Sum; for C1:=1 to Limit do begin Ascii_Str(Sum-C1,S+chr(c1)); end; end; var Summa:integer; Begin ReadLn(Summa); Ascii_Str(Summa,''); End. Вариант рабочий, но по скорости возможно не самый оптимальный. Из-за передачи string очень быстро съедается стек, поэтому реально надо эти строки передавать указателями. Если нужны только строки из символов конкретной части таблицы, то надо просто изменить пределы перебора в цикле. Только тогда не всегда можно будет получить требуемую сумму... ;) Можно попробовать сгенерировать строки вида с1с2с3...сN удовлетворяющие условию с1>c2>c3>...cN. А остальные получить перестановками символов. Yuri --- GoldED+/W32 1.1.4.3 * Origin: -= Опс-с =- (2:5033/35.77) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/33993ba19139.html, оценка из 5, голосов 10
|