Hejsa
Jeg prøvet pt. at lave et program som udskriver det magisk kvadrat for en hvilken som helst side længde.
Jeg skriver programmet i C.
Jeg har allerede en algoritme og programmeret for en ulige sidelængde, mit problem er for de lige.
Jeg har fundet 2 forskellige algoritmer, men jeg kan kun få dem til at virke for sidelængden 4, de virker ikke når sidelængden er 6 eller større.
Du kan se algoritmerne her:
http://www.wikihow.com/Solve-a-Magic-Squarehttp://en.wikipedia.org/wiki/Magic_square#A_method_of_constructing_a_magic_square_of_doubly_even_orderVed godt den fra wikipedia kun er for 4,8, 12 osv, men kan ikke få min algoritme til at virke for 8 eller 12.
Mine 2 kode stykker for disse 2 algoritmer:
- cont=1;
- for(i=0;i<N;i++){
- for(j=0;j<N;j++,cont++)
- A[i][j]=cont;
- }
- //For the primer diagonal
- for(i=0,j=N-1;i<n;i++,j--){
- x=A[i][i];
- A[i][i]=A[j][j];
- A[j][j]=x;
- }
- //the second diagonal
- for(i=0,j=N-1;i<n;i++,j--){
- x=A[i][j];
- A[i][j]=A[j][i];
- A[j][i]=x;
- }
nr. 2:
- cont=1;
- for(i=0;i<N;i++){
- for(j=0;j<N;j++,cont++){
- if(i==j)
- A[i][j]=cont;
- if(j==N-1-i)
- A[i][j]=cont;
- }
- }
- cont=N*N;
- for(i=0;i<N;i++){
- for(j=0;j<N;j++,cont--){
- if(A[i][j]==0)
- A[i][j]=cont;
- }
- }
Er der nogen som kender en anden algoritme til at løse dette?