Pascal: Algoritmussal lépésenként végig lehet számolni hogy hányféleképp írható fel egy tömb elemeinek sorrendje? (bővebben lent)
Olyan algoritmusra lenne szükségem, amely egy tömb elemeinek értékét cserélgeti annyiszor, ahányszor csak felírható a tömb elemeiből a sorrend.
Szeretném, ha nem azonnal csinálná meg, hanem hívogatnám az eljárást és mindig megjegyezné hogy hányadik lépésnél tartott és mindig csak a következő egy lépést hajtaná végre.
Ha a végére ért, akkor kezdené az első lépéssel ismét.
Nem kell hogy kiírja, elég ha a tömb elemeit cserélgeti a program a lépéseknek megfelelően.
Olyat szeretnék, hogy nagy elemszám esetén is végigszámolja.
Példa, hogy mire gondolok:
0,1,2
0,2,1
2,1,0
2,0,1
1,2,0
1,0,2
Mivel nem tudom a megoldást, nem tudok olyan sokat írni.
program hanyszor;
var
t : array [0..2] of byte;
i : byte;
begin
for i := 0 to 2 do
t[i]:=i;
end.
Miként lehetne ezt megoldani?
Köszönöm a választ.
Ha egy lépéssel szeretném csinálni és nem rekurzívan, akkor miként csináljam?
Ez az implentáció mennyire jó s émilyen mértékben van túlbonyolítva, esetleges hibákat tartalmazhat vagy teljesen jó?
program perm;
var
p: array[1 .. 12] of integer;
is_last: boolean;
n: integer;
procedure next;
var i, j, k, t: integer;
begin
is_last := true;
i := n - 1;
while i > 0 do
begin
if p[i] < p[i + 1] then
begin
is_last := false;
break;
end;
i := i - 1;
end;
if not is_last then
begin
j := i + 1;
k := n;
while j < k do
begin
t := p[j];
p[j] := p[k];
p[k] := t;
j := j + 1;
k := k - 1;
end;
j := n;
while p[j] > p[i] do j := j - 1;
j := j + 1;
t := p[i];
p[i] := p[j];
p[j] := t;
end;
end;
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!