Fortran Coder

标题: Fortran幻方 [打印本页]

作者: danzai    时间: 2023-12-2 01:17
标题: Fortran幻方
题目:利用幻方错位补角写法封装子程序,令其可以给出任意奇阶幻方。
有大佬可以解答一下么,实在是写不出来了。

作者: Transpose    时间: 2023-12-2 01:17
本帖最后由 Transpose 于 2023-12-2 09:36 编辑

[Fortran] 纯文本查看 复制代码
program main
    implicit none
    call magic_square(3)
    call magic_square(5)
    call magic_square(7)
contains
    subroutine magic_square(n)
        integer,intent(in)::n
        integer::a(n,n)
        integer::i
        write(*,"(A,g0)")"n=",n
        a=reshape([(i,i=1,n*n)],shape=[n,n])
        a=cshift(a,[(i,i=-n/2,n/2)],dim=1)
        a=cshift(a,[(i,i=-n/2,n/2)],dim=2)
        do i=1,n
            write(*,"(*(I3))")a(:,i)
        end do
    end subroutine magic_square
end program main

输出

[Fortran] 纯文本查看 复制代码
n=3
  8  1  6
  3  5  7
  4  9  2
n=5
17 24  1  8 15
23  5  7 14 16
  4  6 13 20 22
10 12 19 21  3
11 18 25  2  9
n=7
30 39 48  1 10 19 28
38 47  7  9 18 27 29
46  6  8 17 26 35 37
  5 14 16 25 34 36 45
13 15 24 33 42 44  4
21 23 32 41 43  3 12
22 31 40 49  2 11 20



参考错位补角法https://baike.baidu.com/item/%E5%B9%BB%E6%96%B9/169544
作者: danzai    时间: 2023-12-2 15:02
Transpose 发表于 2023-12-2 09:34
[mw_shl_code=fortran,true]program main
    implicit none
    call magic_square(3)

万分感谢!!!!!太厉害了!!!




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2