![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как заполнить массив [0..3,0...3]
~Aid~ © (2006-11-19 15:48:00)как заполнить массив [0..3,0...3] разными числами от 0 до 15
~Aid~ (2006-11-19 16:45:00) [1]ыы от [0..15]-так понятно.
вообще написал вроде бы быстро работает..
нехотел рандом потому что еще будет подсчет кол-ва инверсий в массиве.. то есть будет не очень быстро
c:=0;
for i:=0 to 3 do begin
for j:=0 to 3 do begin
mas[i,j]:=c;
inc(c);
end;
end;
c:=random(5)+50;
for i:=1 to c do
begin
o1:=random(4);
p1:=random(4);
o2:=random(4);
p2:=random(4);
c:=mas[o1,p1];
mas[o1,p1]:=mas[o2,p2];
mas[o2,p2]:=c;
end;
Anatoly Podgoretsky (2006-11-19 16:28:00) [2]> ~Aid~ (19.11.2006 16:18:18) [18]
Конечно неуместно, 14 чисел не хватит для заполнения массива из 16 элементов и как ни старайся только зацикливание и получишь.
KilkennyCat (2006-11-19 16:28:00) [3]можно несколькими способами. моим, или Ориона... или еще третьим вариантом.
от прогона пустых циклов в моем варианте тоже несложно уйти.
~Aid~ (2006-11-19 16:18:00) [4]Anatoly Podgoretsky
не уместно
Anatoly Podgoretsky (2006-11-19 16:16:00) [5]> ~Aid~ (19.11.2006 16:14:16) [16]
В институте вывесить объяву - помогите решить, оплату гарантирую.
~Aid~ (2006-11-19 16:14:00) [6]так как же лучше сделать?
KilkennyCat (2006-11-19 16:12:00) [7]> [14] Орион © (19.11.06 16:09)
теоретически как раз бесконечно не будет, а вот практически :))
Но, мощная машина успеет отработать :)
Орион (2006-11-19 16:09:00) [8]> [12] KilkennyCat © (19.11.06 16:05)
Теоретически бесконечный цикл может получиться :)
Лучше сразу заполнить массив числами, а потом рандомное чило рандомных перестановок сделать.
~Aid~ (2006-11-19 16:06:00) [9]а... щас попробую
Anatoly Podgoretsky (2006-11-19 16:05:00) [10]> ~Aid~ (19.11.2006 16:01:07) [7]
как заполнить массив [0..3,0...3] разными числами от 0 до 15
KilkennyCat (2006-11-19 16:05:00) [11]в твоем варианте, методом от противного:
заполняй последовательностью 0..15 случайно выбранные ячейки, с проверкой их на уже заполненность. код будет в пять раз меньше.
KilkennyCat (2006-11-19 16:04:00) [12]переписать алгоритм нафиг.
~Aid~ (2006-11-19 16:03:00) [13]а как поправить?
KilkennyCat (2006-11-19 16:02:00) [14]> if findN(c) then mas[i,j]:=c
> else goto 1;
вероятно, здесь всегда гоуту. вот и зацикливается.
~Aid~ (2006-11-19 16:01:00) [15]то есть числа 0,1,..,15
что значит условие от 0?
Anatoly Podgoretsky (2006-11-19 16:00:00) [16]> ~Aid~ (19.11.2006 15:53:03) [3]
4*4 = 16
Плюс не выполняется условие от 0
~Aid~ (2006-11-19 15:58:00) [17])) человеком
Джо (2006-11-19 15:56:00) [18]Я не могу заставить себя поверить, что подобный код написан человеком (c) Знакомый менеджер.
~Aid~ (2006-11-19 15:53:00) [19]ыыы... не могу найти почему зацикливается...
label 1;
var
i,j,c:integer;
mas:array[0..3,0..3] of integer;
function findN(a:integer):boolean;
var
g,k:integer;
begin
for g:=0 to 3 do begin
for k:=0 to 3 do begin
if a=mas[g,k] then begin result:=false;exit;end;
end;
end;
result:=true;
end;
begin
randomize;
for i:=0 to 3 do begin
for j:=0 to 3 do begin
1: c:=random(14)+1;
if findN(c) then mas[i,j]:=c
else goto 1;
end;
end;
for i:=0 to 3 do begin
for j:=0 to 3 do begin
write(mas[i,j],' ');
end;
writeln;
end;
readln;
Anatoly Podgoretsky (2006-11-19 15:49:00) [20]> ~Aid~ (19.11.2006 15:48:00) [0]
В цикле