> 文档中心 > 回型矩阵python、java

回型矩阵python、java

从数学的规律角度来计算回型矩阵,以python为例

def hxjz_math(n):    a = np.zeros([n,n])    a[0,0]=1    a[0,n-1]=n    a[n-1,n-1]=2*n-1    a[n-1,0]=3*n-2    for i in range(1,int((n-1)/2)+1): a[i,i]=4*(n-2*i+1)+a[i-1,i-1] a[i,n-i-1]=a[i,i]+n-2*i-1 a[n-i-1,n-i-1]=a[i,i]+2*n-4*i-2 a[n-i-1,i]=a[i,i]+3*n-6*i-3    for i in range(0,int((n-1)/2)+1): for j in range(1,n-2*(i+1)+1):     a[i,i+j]=a[i,i]+j     a[i+j,n-i-1]=a[i,n-i-1]+j     a[n-i-1,i+j]=a[n-i-1,i]-j     a[i+j,i]=a[n-i-1,i]+n-2*(i+1)-j+1    return a

这种方法是计算对角线数值,然后对空缺的位置进行赋值计算。

还有就是借鉴顺序赋值代码

def bsm(n):    a = np.zeros([n,n])    p = 0    q = n-1    t = 1    while p < q: for i in range(p,q):     a[p][i] = t     t += 1 for i in range(p,q):     a[i][q] = t     t += 1 for i in range(q,p,-1):     a[q][i] = t     t += 1 for i in range(q,p,-1):     a[i][p] = t     t += 1 p += 1 q -= 1    if q == p: a[p][p] = t    return a

这种方式逻辑清晰,按照回型一次赋值。

最后我将其修改为java代码

import java.util.Scanner;public class huixinghanshu {    public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入回形函数的n:"); int n = input.nextInt(); int[][]a = new int[n][n]; int p = 0 ,t=1,q = n - 1; while(p<q){     for(int i =p;i<q;i++){//上行  a[p][i] = t;  t++;     }     for (int i=p;ip;i--){//下行  a[q][i] =t;  t++;     }     for (int i=q;i>p;i--){//左列  a[i][p] = t;  t++;     }     p++;     q--; } if (p==q){//n为奇数时的最后一个数     a[p][p] = t; } for(int i=0;i<n;i++){     for(int j=0;j<n;j++){  System.out.print(a[i][j]+"\t");     }     System.out.println(); }    }}

都可以顺利运行,相对于我自己按照数学逻辑写出的代码,我还是更倾向于借鉴的这种,思考的逻辑简单清晰,写出来也不花时间。

下面附一张n为9的回型矩阵结果。

参考:Python 趣味百题_u010019717的博客-CSDN博客