moin, ich hab folgendes programm zur lösung eines magischen quadrats geschrieben...
es soll ein 4x4-großes quadrat mit den zahlen 1-16 gefüllt werden, sodass die summen (spalten, zeilen, diagonale) 34 ergeben
ich wollte einfach alle kombinationen ausprobiern, und immer testen obs funzt
doch mir fehlt noch eine idee, wie ich es schaffe, das jede zahl nur einmal eingesetz wird...
hier meine prozedur, ist rekursiv (worauf ich sehr stolz bin
)
Delphi-Quellcode:
procedure TForm1.setfield(recursion:byte);
var i:integer;
begin
for i:=1 to 16 do
begin
//Hierum Gehts, es muss statt i irgendwas anderes eingesetzt werden....
quadrat[(recursion div 4)+1, (recursion mod 4)+1]:=i;
if iscorrect
then solutions.Add( inttostr(
quadrat[1,1]+quadrat[1,2]+quadrat[1,3]+quadrat[1,4]+
quadrat[2,1]+quadrat[2,2]+quadrat[2,3]+quadrat[2,4]+
quadrat[3,1]+quadrat[3,2]+quadrat[3,3]+quadrat[3,4]+
quadrat[4,1]+quadrat[4,2]+quadrat[4,3]+quadrat[4,4]));
if recurse<15
then setfield(recursion+1);
end;
end;
zur erklärung:
quadrat is ein array[1..4,1..4] of byte
iscorrect eine function die prüft ob die lösung korrekt ist
hat da einer idee wie man das machen könnte?
PS: ausserdem bekomme ich noch einen abstrakten fehler....weiss aber nicht wann, irgendwann bei der rekursion...