|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Sergey Politov 2:5015/176.18 12 Jan 2002 05:43:26 To : Andrew Plyako Subject : Re: дайте алгоритм, plz! -------------------------------------------------------------------------------- До меня дошли слухи, что *10.01.02* *6:28:06* пролетало сообщение от Andrew к *Sergey Popkov* про *"дайте алгоритм, plz!"*. И я решил вмешаться. [...] AP> function MyRandom(const Range: byte; const NotInclude: set of byte): AP> byte; { NotInclude - множество чисел, которые нельзя получить в качестве AP> ответа Range - мощность target-множества, то есть 100 минус AP> число элементов в NotInclude } var i, result: byte; begin AP> // Если не ошибаюсь, random выдает число от 0 до X-1. result := AP> random(Range)+1; i := 1; while i<= result do begin if i in AP> NotInclude then inc(result); inc(i); end; MyRandom := result; AP> end; AP> Таким образом, сама программа выглядит так: NotInclude := []; for i:=1 to AP> 100 do begin CurCell := MyRandom(101-i, NotInclude); Ячейку i AP> оригинальной матрицы записать в ячейку CurCell итоговой матрицы; AP> NotInclude := NotInclude + [CurCell]; end; Идея конечно интересная, но не универсальная, что ты будешь делать, когда у тебя массив будет размером 100 на 100? Я конечно понимаю, что предложенную задачу ты решил, но мне кажется твою идею можно модернизировать. заводим вспомогательный массив temp. Заполняем его 1. теперь наш MyRandom выглядит так. function MyRandom(r: integer; var temp: array of byte): integer; var i,p: integer; begin i:= random(r)+1; p:= 0; repeat dec(i,temp[p]); inc(p); until i=0; dec(p); temp[p]:= 0; MyRandom:= p; end; Вроде все правильно. np: Nightwish "Dead Boy's Poem" Искренне Ваш Sergey Politov --- WP/95 Rus 1.78 Релиз 1 Reg. * Origin: Heavy Metal is the Law. (2:5015/176.18) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39911d1ebb0b.html, оценка из 5, голосов 10
|