回 帖 发 新 帖 刷新版面

主题:急求魔方高手!!

比如输入3,得到图形
1   8   7
2   9   6
3   4   5
输入5,得到图形
1   16   15   14   13
2   17   24   23   12
3   18   25   22   11
4   19   20   21   10
5   6    7    8    9

所输出的图形都是正方形的,哪为高手能帮我?要经典的那种

回复列表 (共8个回复)

沙发

难道没有人知道吗?

板凳

这个不是魔方,
这个是螺旋方阵,你搜索一下,已经有n多贴子是这个内容了

3 楼

10 input n
if n=3 then
  ? "1   8   7"
  ? "2   9   6"
  ? "3   4   5"
else
   if n=5 then
     ? "1   16   15   14   13"
     ? "2   17   24   23   12"
     ? "3   18   25   22   11"
     ? "4   19   20   21   10"
     ? "5   6    7    8    9"
   else
     goto 10
   end if
end if
end

4 楼

用PASCAL编:
var j:integer;
    n,i,k,x,y:byte;
    r:array[1..25,1..25]of byte;
begin
  write('n=');readln(n);
  for x:=1 to n do
  for y:=1 to n do r[x,y]:=0;
  x:=0;y:=n;i:=0;k:=n;j:=1;
  while i<n*n do
  begin
    for i:=i+1 to i+k do
    begin
      x:=x+j;
      r[x,y]:=i;
    end;
    dec(k);
    if j=1 then j:=-1 else j:=1;
    for i:=i+1 to i+k do
    begin
      y:=y+j;
      r[x,y]:=i;
    end;
  end;
  for x:=1 to n do
  begin
    for y:=1 to n do write(r[x,y]:3);
    writeln;
  end;
end.
~{UbJGK3J1Uk5D#,DfJ1Uk5DOHWT<:MF!#~}

qbasic 论坛里有

5 楼

书上也有啊

6 楼

这个很简单啊/我用QB给你编吧:
   daclare sub disp ()
   dim shared n as integer
   input"n=";n
   dim shared a(n,n)as integer
   k=1
   for i = 1 to n
      for j = i to n-i+1
         a(i,j)=k
           k=k+1
      next j
      for j=i+1 to n-i+1
         a(n-i+1,j)=k
           k=k+1
      next j
      for j= n-i to i step -1
         a(j,n-i+1)= k
           k=k+1
      next j
      for j = n-i to i+1  step -1
         a(i,j)=k
           k=k+1
      next j
   next i
   print "result="
   disp
   end
子程序如下:   sub disp
                  for i = 1 to n
                      for j= 1to n
                         print using"####";a(i,j);
                      next j
                       print
                  next i
                end sub
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
好了,这个持续编好了.我很喜欢编程序,特别是QB,我在学校计算机兴趣小组里编的.如果以后能和广大编程好友一起分享快乐.我很高兴.我的QQ:286451009,你们可以加我和我联系.希望爱编程序的朋友们和我一起探讨.我很乐意.

7 楼

cls
input n
dim a(n+1,n+1)
s=1:bj=n
do
  do while a(i,j)=0 and i<=bj
     a(i,j)=s
     s=s+1
     i=i+1
  loop
  i=i-1
  j=j+1
  do while a(i,j)=0 and j<=bj
    a(i,j)=s
    s=s+1
   j=j+1
  loop
  j=j-1
  i=i-1
  do while a(i,j)=0 and i>=n+1-bj
    a(i,j)=s
    s=s+1
    i=i-1
  loop
  i=i+1
  j=j-1
  do while a(i,j)=0 and j>=n+1-bj
    a(i,j)=s
    s=s+1
    j=j-1
  loop
  j=j+1
  i=i+1
loop until s>n*n
for i=1 to n
  for j=1 to n
   print a(i,j);
next j
print
next i
end


8 楼

Cls
INPUT "n="; n
Dim a(n, n) As Integer
i = 1
j = (n + 1) / 2
a(i, j) = 1
  For k = 2 To n * n
     i = i - 1: j = j - 1
     If i < 1 And j >= 1 Then
     i = i + n
     ElseIf i >= 1 And j < 1 Then
     j = j + n
     ElseIf i < 1 And j < 1 Or a(i, j) <> 0 Then
     i = i + 2: j = j + 1
     End If
     a(i, j) = k
   Next k
For i = 1 To n
   For j = 1 To n
   Print USING; "#####"; a(i, j);
   Next j
Rem  PRINT
Print
Next i
End

我来回复

您尚未登录,请登录后再回复。点此登录或注册