不是VIP会员,不能显示答案

题目解答

题目:
奇数阶魔阵
【问题描述】魔阵是用自然数1,2,3…,n2填n阶方阵的各个元素位置,使方阵的每行的元素之和、每列元素之和及主对角线元素之和均相等。奇数阶魔阵的一个算法是将自然数数列从方阵的中间一行最后一个位置排起,每次总是向右下角排(即Aij的下一个是i+1,j+1)。但若遇以下四种情形,则应修正排数法。
(1) 列排完(即j=n+1时),则转排第一列;
(2) 行排完(即i=n+1时),则转排第一行;
(3) 对An,n的下一个总是An,n-1;
(4) 若Aij已排进一个自然数,则排Ai-1,j-2。
例如3阶方阵,则按上述算法可排成:
4 3 8
9 5 1
2 7 6
【参考程序】:
var  
   a : array[1..99,1..99]of integer; 
   i,j,k,n : integer; 
  begin 
   fillchar(a,sizeof(a),0); 
   write('n=');readln(n); 
       i:=n div 2+1;     
j:=n; 
   a[i,j]:=1; 
   for k:=2 to n*n do 
    begin 
     if (i=n)and(j=n) then 
       j:=j-1     
     else 
begin 
       i:=i mod n +1; 
       j:=j mod n +1; 
      end; 
      if a[i,j]<>0 then        
      begin 
       i:=i-1; 
       j:=j-2; 
      end; 
     a[i,j]:=k; 
    end; 
   for i:=1 to n do 
    begin 
      for j:=1 to n do     
      write(a[i,j]:5); 
     writeln; 
    end; 
  end.
考点:
分析:
解答:
评论:
老师: