|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrew Starsh 2:5071/59 01 Jan 2003 11:50:53 To : Igor Kasyanchuk Subject : Re: масив чисел --------------------------------------------------------------------------------
Приветствую Вас, Igor!
27 декабря 2002 года в 16:23 Igor Kasyanchuk --> All
IK> Как в масив А(10) можно закинуть 10 разных чисел от 0 до 9 чтобы
IK> числа в масиве на ПОВТОРЯЛИСЬ .
IK> например 2 5 6 7 0 3 4 9 8 1
IK> 7 5 4 3 8 9 1 2 0 6
Легко. Сначала заполнить массив нулями, потом цикл от единицы до девяти, и в
каждом шаге цикла его цифpу пихать в то место массива, на котоpое укажет
генеpатоp псевдослучайных, если, конечно, в том месте ноль. Если место уже
занято - повтоpить с генеpатоpом псевдослучайных.
А вообще-то тут был тpед пpо такие pяды из неповтоpяющихся соседних
символов упоpядоченного pяда. Есть такой лексико-гpафический метод, с его
помощью можно получить "следующую" комбинацию. Hапpимеp, от "самой легкой"
0 1 2 3 (если из четыpех символов), следующая будет 0 1 3 2, потом - 0 3 1 2, 0
3 2 1, и т.д., до последней, самой "весомой" 3 2 1 0. Там тpебовался некий
"генеpатоp", я в ней написал функцию "Sled", котоpая выдает следующую более
весомую комбинацию. В пpинципе, можно эту фунцию запустить в цикле, а число
повтоpений цикла бpать из генеpатоpа псевдослучайных.
Вот та пpогpаммулька:
=== Text:=New(pBufStream,Init('keygen3.pas',stOpenRead,1024)); ===
program keygen;
(*Программа генерирует комбинации из непрерывного ряда символов
от "менее весомого" до "более весомого"*)
uses crt;
var
F:text;
kol:longint;
s0:string;
Function Sled(s:string):string;
var
uk,uk1,c:byte;
ch,cho,chn:char;
sn:string;
begin
uk:=length(s)-1;
while (uk>0) and (Pos(chr(ord(s[uk])+1),s)<uk) do uk:=uk-1;
if uk=0 then
begin
Sled:='';
end
else
begin
sn:=s;
ch:=chr(ord(sn[uk])+1);
sn[uk]:=ch;
cho:=chr(0);
for c:=uk+1 to length(s) do
begin
chn:=chr(255);
for uk1:=uk to length(s) do
begin
if (s[uk1]<>ch) and (s[uk1]>cho) and (s[uk1]<chn) then chn:=s[uk1];
end;
sn[c]:=chn;
cho:=chn;
end;
Sled:=sn;
end;
end;
BEGIN
s0:='';
while s0<>'0' do
begin
writeln('Введите корректную комбинацию , выход - 0');
readln(s0);
if s0<>'0' then
begin
writeln('Сколько?');
readln(kol);
Assign(F, 'com.txt');
Rewrite(F);
while kol>0 do
begin
s0:=Sled(s0);
if s0='' Then
begin
kol:=0;
Writeln(F,'Ряд в сторону "увеличения" закончен');
end
else
begin
Writeln(F,s0);
kol:=kol-1;
end
end;
Close(F);
end;
end;
END.
=== Dispose(Text,Done); ===
С кучей пожеланий - Andrew.
--- Hу очень голый GoldED+/386 1.1.5
* Origin: Страшный-бородатый... (2:5071/59)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/18823e12cbc9.html, оценка из 5, голосов 10
|