回型矩阵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博客